Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2011, 15:04   #1
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию Сравнение строк

Здравствуйте!

Подскажите пожалуйста, как сравнивать символы строки, а не всю строку целиком, но при этом программа выполняла бы туже функцию, что и ниже приведенная. Мне требуется из массива сравнивать по 4 символа с числами от 0000 до 1111 и записывать частоту их появления
Код:
#include <iostream>
#include <conio.h>
#include <cstring>
#include <cstdio>
#include <clocale>
 
using namespace std;
 
const int size = 20;
 
int main ()
{
    setlocale (LC_ALL, "Russian");
    char A [size][5] = {{"0000"},{"0001"},{"0001"},{"0111"},{"0001"},{"0001"},{"1111"},{"1001"},{"0101"},{"0111"},
    {"0111"},{"1111"},{"1001"},{"0111"},{"1101"},{"0111"},{"1111"},{"1101"},{"0101"},{"0111"}};
        
    for (int i=0; i<size; i++) cout << A[i] << " ";
    cout << endl<< endl;
    
    int count_0=0, count_1=0,count_2=0,count_3=0,count_4=0,count_5=0,count_6=0,count_7 = 0,count_8=0,count_9=0,count_10 =0, count_11=0,count_12=0,count_13=0,count_14=0,count_15 =0;
      
    char C[16][5] = {{"0000"},{"0001"},{"0010"},{"0011"},{"0100"}, {"0101"}, {"0110"}, {"0111"}, {"1000"}, {"1001"}, {"1010"},
 {"1011"}, {"1100"}, {"1101"}, {"1110"}, {"1111"}};
    
    for (int i=0; i<size; i++){
        //for (int j=0; j<16; j++){
    if (!strcmp (A[i],C[0])) count_0 = ++count_0;   
    else if (!strcmp (A[i],C[1])) count_1 = ++count_1;  
    else if (!strcmp (A[i],C[2])) count_2 = ++count_2;  
    else if (!strcmp (A[i],C[3])) count_3 = ++count_3;  
    else if (!strcmp (A[i],C[4])) count_4 = ++count_4;  
    else if (!strcmp (A[i],C[5])) count_5 = ++count_5;  
    else if (!strcmp (A[i],C[6])) count_6 = ++count_6;  
    else if (!strcmp (A[i],C[7])) count_7 = ++count_7;  
    else if (!strcmp (A[i],C[8])) count_8 = ++count_8;  
    else if (!strcmp (A[i],C[9])) count_9 = ++count_9;
    else if (!strcmp (A[i],C[10])) count_10 = ++count_10;
    else if (!strcmp (A[i],C[11])) count_11 = ++count_11;
    else if (!strcmp (A[i],C[12])) count_12 = ++count_12;
    else if (!strcmp (A[i],C[13])) count_13 = ++count_13;
    else if (!strcmp (A[i],C[14])) count_14 = ++count_14;
    else if (!strcmp (A[i],C[15])) count_15 = ++count_15;
    //}
    }
    cout <<"В массиве элементов равных 0 = " <<count_0 << " " << endl;
    cout <<"В массиве элементов равных 1 = " <<count_1 << " " << endl; 
    cout <<"В массиве элементов равных  2 = " <<count_2 << " " << endl; 
    cout <<"В массиве элементов равных 3 = " <<count_3 << " " << endl; 
    cout <<"В массиве элементов равных 4 = " <<count_4 << " " << endl; 
    cout <<"В массиве элементов равных  5 = " <<count_5 << " " << endl; 
    cout <<"В массиве элементов равных 6 = " <<count_6 << " " << endl; 
    cout <<"В массиве элементов равных 7= " <<count_7 << " " << endl; 
    cout <<"В массиве элементов равных  8 = " <<count_8 << " " << endl; 
    cout <<"В массиве элементов равных  9 = " <<count_9 << " " << endl; 
    cout <<"В массиве элементов равных  10 = " <<count_10 << " " << endl; 
    cout <<"В массиве элементов равных 11 = " <<count_11 << " " << endl; 
    cout <<"В массиве элементов равных 12 = " <<count_12 << " " << endl; 
    cout <<"В массиве элементов равных  13 = " <<count_13 << " " << endl; 
    cout <<"В массиве элементов равных 14 = " <<count_14 << " " << endl; 
    cout <<"В массиве элементов равных  15 = " <<count_15 << " " << endl; 
    
    getch ();
    return 0;
}
проблема в том, что инициализация массива выглядит как
Код:
 char A [][] = {{"0000"},{"0001"},{"0001"},
а мне нужно, что бы инициализация выглядела как
Код:
char A [][] = {{'0','1','0','1'}, {'0','1','0','1'}}
то есть если элемент массива А
Код:
{'0','0','0','0'}
равен элементу массива С
Код:
{'0','0','0','0'}
то сont_0 увеличить на единицу и т.д.

Последний раз редактировалось Corvette; 11.09.2011 в 15:17.
Corvette вне форума Ответить с цитированием
Старый 11.09.2011, 15:14   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Corvette Посмотреть сообщение
проблема в том, что инициализация массива выглядит как
Код:
 char A [][] = {{"0000"},{"0001"},{"0001"},
а мне нужно, что бы инициализация выглядела как
Код:
char A [][] = {{'0','1','0','1'}, {'0','1','0','1'}}
В общем-то приведенные примеры эквивалентны, нужно только добавить нуль-терминацию:
Код:
char A [][] = {{'0','1','0','1', '\0'}, {'0','1','0','1', '\0'}}
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 11.09.2011, 21:57   #3
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию

Попытался написать программу, но не считает, где ошибка?
Код:
#include <iostream>
#include <conio.h>
#include <cstring>
#include <cstdio>
#include <clocale>
 
using namespace std;
 
const int size = 21;
 
int main ()
{
    setlocale (LC_ALL, "Russian");
    char A [size] = {"01010100011010101010"};
        
    for (int i=0; i<size; i++) cout << A[i] << " ";
    cout << endl<< endl;
    
    int count_0=0, count_1=0,count_2=0,count_3=0,count_4=0,count_5=0,count_6=0,count_7 = 0,count_8=0,count_9=0,count_10 =0, count_11=0,count_12=0,count_13=0,count_14=0,count_15 =0;
      
    char C[16][5] = {{"0000"},{"0001"},{"0010"},{"0011"},{"0100"}, {"0101"}, {"0110"}, {"0111"}, {"1000"}, {"1001"}, {"1010"},
 {"1011"}, {"1100"}, {"1101"}, {"1110"}, {"1111"}};
    
    char temp [5][5];
    int temp_i=0;
    int temp_j=0;
        for (int i=0; i<20; i++) {
                if (i%4==0 && i)
                {
                        temp_i++;
                        temp_j=0;
                }
                temp[temp_i][temp_j++]=A[i];
        }
 
        for (int i=0; i<5; i++) {
        for (int j=0; j<4; j++){
        cout << temp[i][j] << ' ';
        }
        cout << '\0' << endl;
        }
        cout << endl;
   
   for (int i=0; i<5; i++){
        //for (int j=0; j<16; j++){
    if (!strcmp (temp[i],C[0])) count_0 = ++count_0;   
    else if (!strcmp (temp[i],C[1])) count_1 = ++count_1;  
    else if (!strcmp (temp[i],C[2])) count_2 = ++count_2;  
    else if (!strcmp (temp[i],C[3])) count_3 = ++count_3;  
    else if (!strcmp (temp[i],C[4])) count_4 = ++count_4;  
    else if (!strcmp (temp[i],C[5])) count_5 = ++count_5;  
    else if (!strcmp (temp[i],C[6])) count_6 = ++count_6;  
    else if (!strcmp (temp[i],C[7])) count_7 = ++count_7;  
    else if (!strcmp (temp[i],C[8])) count_8 = ++count_8;  
    else if (!strcmp (temp[i],C[9])) count_9 = ++count_9;
    else if (!strcmp (temp[i],C[10])) count_10 = ++count_10;
    else if (!strcmp (temp[i],C[11])) count_11 = ++count_11;
    else if (!strcmp (temp[i],C[12])) count_12 = ++count_12;
    else if (!strcmp (temp[i],C[13])) count_13 = ++count_13;
    else if (!strcmp (temp[i],C[14])) count_14 = ++count_14;
    else if (!strcmp (temp[i],C[15])) count_15 = ++count_15;
    //}
    }
    cout <<"В массиве элементов равных  0 = " <<count_0 << " " << endl;
    cout <<"В массиве элементов равных  1 = " <<count_1 << " " << endl; 
    cout <<"В массиве элементов равных  2 = " <<count_2 << " " << endl; 
    cout <<"В массиве элементов равных = " <<count_3 << " " << endl; 
    cout <<"В массиве элементов равных 4 = " <<count_4 << " " << endl; 
    cout <<"В массиве элементов равных  5 = " <<count_5 << " " << endl; 
    cout <<"В массиве элементов равных 6 = " <<count_6 << " " << endl; 
    cout <<"В массиве элементов равных  7 = " <<count_7 << " " << endl; 
    cout <<"В массиве элементов равных  8 = " <<count_8 << " " << endl; 
    cout <<"В массиве элементов равных 9 = " <<count_9 << " " << endl; 
    cout <<"В массиве элементов равных  10 = " <<count_10 << " " <<endl; 
    cout <<"В массиве элементов равных  11 = " <<count_11 << " " <<endl; 
    cout <<"В массиве элементов равных 12 = " <<count_12 << " " << endl; 
    cout <<"В массиве элементов равных 13 = " <<count_13 << " " << endl; 
    cout <<"В массиве элементов равных 14 = " <<count_14 << " " << endl; 
    cout <<"В массиве элементов равных 15 = " <<count_15 << " " << endl; 
    
    getch ();
    return 0;
}
PS: разбивка массива на тетрады и сравнение каждой тетрады с шаблонами и подсчета статистики появлений каждого типа тетрады рт 0000 до 1111.
Corvette вне форума Ответить с цитированием
Старый 11.09.2011, 22:08   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Corvette, на цикл разбивать не пробовали?
Carbon вне форума Ответить с цитированием
Старый 11.09.2011, 23:42   #5
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию

То есть сделать одну итерацию цикла?

Разбить на тетрады вроде получается, а вот сравнить с шаблонами нет. Я так понимаю, что когда я разбиваю на тетрады получаются строки вида {'0','1','0','1'} , а сравниваю я со строкой вида {"0101"}. Поэтому и не работает наверное! Как, при разбивки на тетрады в конце каждой четверки добавить элемент '\0'. Чтобы сравнение с строкой {"0101"} было корректным.

Хотя может я и не прав (у меня опыта на С++ ооочень мало).
Corvette вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк в C# Павел111 Помощь студентам 3 17.12.2010 17:26
Сравнение строк в С++ Китти Общие вопросы C/C++ 2 12.10.2010 16:56
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце Shpr0T Microsoft Office Excel 8 30.08.2010 17:52
Сравнение строк в Си Maiden Помощь студентам 2 29.07.2010 12:45
Сравнение строк HOMER Общие вопросы Delphi 7 04.01.2008 05:53