Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
#1

Стоит задача сравнение и подсчета символов строки. - C++

11.09.2011, 14:09. Просмотров 1646. Ответов 23
Метки нет (Все метки)

Стоит задача сравнение и подсчета символов строки. Получается, сравнить только всю строку. Подскажите пожалуйста, как сравнивать символы строки, а не всю строку целиком, но при этом программа выполняла бы туже функцию, что и ниже приведенная. То есть массив А инициализировать как
C++
1
А [][] = {{'0','1','0','1'}, {'0','1','0','1'}, и т.д}
и С как
C++
1
C [][] = {{'0','0','0','0'}, {'0','0','0','1'}, и т.д}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#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;
}
PS: Модераторы извините что у темы такое название (при создании допустил ошибку), не могу найти как исправить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 14:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стоит задача сравнение и подсчета символов строки. (C++):

Написать программу подсчета пробелов, символов табуляции и новой строки - C++
Помогите, пожалуйста, уважаемые программисты! Заранее большое спасибо! 1. Написать программу подсчета пробелов, символов табуляции и...

Сократить код. Задача про сравнение символов - C++
набросал решение вышесказаной задачи вот код #include &lt;fstream&gt; main(int k){ std::fstream i(&quot;input.txt&quot;),o(&quot;output.txt&quot;, 2); ...

Сравнение символов из строки - C++
getline(cin, Text); for (i = 1; i &lt;= Text.length(); i++) { 16: if ((Text == &quot; &quot;) &amp;&amp; (Text == &quot; &quot;)) { 18: ...

Написать собственный класс для ввода и вывода строки, подсчета количества символов в строке - C++
как написать собственный с++ класс для ввода и вывода строки, подсчета количества символов в строке

Создать контейнер класса с методами включения и удаления строки, очистки текста, подсчета количества символов - C++
Помогите создать контейнер класса который является абстракцией текста с методами включения и удаления строки из текста, очистки текста,...

Преобразовать заданные строки, согласно условию (сортировка и сравнение строк, вставка/удаление символов) - C++
Даны строки A и B. Если все символы A входят в B и в B есть повторяющиеся символы, то упорядочить символы B в порядке, обратном к...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 17:03 #16
Цитата Сообщение от ForEveR Посмотреть сообщение
(void*)
- к чему прицеплять void *
Цитата Сообщение от ForEveR Посмотреть сообщение
32568
- внимательно посмотри bin размера какого, цифры нужно передавать до 16-ти!
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.09.2011, 17:05 #17
-=ЮрА=-, Адрес я выводил. Да с цифрами согласен.
Но говорю то же, что и раньше. Такой возврат некорректен.
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 17:06 #18
Цитата Сообщение от ForEveR Посмотреть сообщение
Ошибка сегментирования
- значит твой компилятор отличен от моего, здесь указал среду разработки
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
в программе использован компилятор от VS 6.0!
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.09.2011, 17:09 #19
-=ЮрА=-, Ошибка сегмента шла из-за попытки free(Tetrads)
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 17:12 #20
ForEveR, это тебе на С++ код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>//i/o
#include <conio.h>
using namespace std;
 
char * DecToBinTetr(long num);
 
int main()
{
    char buf[5];
    for(int j = 0; j < 16; j++)
    {
        strcpy(buf,DecToBinTetr(j));
        std::cout<<buf<<"\r\n";
    }
    getch();
    return 0;
}
 
char * DecToBinTetr(long num)
{
    int i = 0;
    char bin[] = "0000";
    do
    {
        bin[i] = '0';
        if(num%2)
            bin[i] = '1';
        num /= 2;
        i++;
    }
    while(0 < num);
    return &bin[0];
}
Изображения
 
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 17:16 #21
Цитата Сообщение от ForEveR Посмотреть сообщение
Ошибка сегмента шла из-за попытки free(Tetrads)
- к алгоритму это уже не имеет никакого отношения - память вообще можно не освобождать, т.к. приложение закрылось и память отведенную под Tetrads очистит ОС...

Добавлено через 1 минуту
Corvette, сейчас накидаю в С++ попроще - шаблоны будут вбиты константно
-=ЮрА=-
Заблокирован
Автор FAQ
12.09.2011, 17:39 #22
Вот алгоритм на С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>//malloc realloc
#include <conio.h>
using namespace std;
 
//Руссификация
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='ё')
            stream<<char(241);
        else if(*ps=='Ё')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
char sTetrads[][5] = {
    "0000",
    "1000",
    "0100",
    "1100",
    "0010",
    "1010",
    "0110",
    "1110",
    "0001",
    "1001",
    "0101",
    "1101",
    "0011",
    "1011",
    "0111",
    "1111"
};
 
bool CompStrTetrada(char * str, const char * sTetrada);
 
int main()
{
    long i,j,sLen,n = 16;
    //Всего тетрад 16 : 1111 = 2^0 + 2^1 + 2^2 + 2^3 = 15
    int iTetrads[16] = {0};//Число каждой тетерады в тектсе 
    
 
    char * s;
    char str[1025];
    do
    {
        for(j = 0; j < n; j++)
            iTetrads[j] = 0;//Обнуляем счётчики тетерад
        std::cout<<"Введите строку (не более 1024 символов)\r\n:>";
        std::cin.getline(str,1024);//Читаем строку
        sLen = strlen(str);
        //Добавляем текст нулями текст если строка содержала не кратное 4 число символов
        if((j = sLen % 4) != 0)
        for(i = sLen; i < sLen + (4 - j); i++)
            str[i] = '0';
        std::cout<<"\tИсходная строка разбитая на тетрады\r\n";
        for(i = 0; i < sLen; i += 4)
        {
            s = &str[0] + i;//str уже константная поєтому нужно с адресом работать &str[0]
            printf("%c%c%c%c ",s[0],s[1],s[2],s[3]);
            for(j = 0; j < n; j++)
            {
                //Если нашли тетраду увеличиваем счётчик соответсвующей тетрады на 1-цу
                if(CompStrTetrada(s, sTetrads[j]))
                    iTetrads[j] += 1;
            }
        }
        std::cout<<"\r\n\tСписок тетрад в тектсе\r\n";
        for(j = 0; j < n; j++)
            std::cout<<sTetrads[j]<<" : "<<iTetrads[j]<<"\r\n";
         std::cout<<"Y - новый ввод\r\n";
    }
    while(toupper(getch()) == 'Y');
    getch();
    return 0;
}
 
bool CompStrTetrada(char * str, const char * sTetrada)
{
    bool bRet = false;
    char sCmp[4];
    strncpy(sCmp,str,4);//Копируем 4 первых символа строки str
    if(strcmp(sCmp,sTetrada) == 0)
        bRet = true;
    return bRet;
}
Миниатюры
Стоит задача сравнение и подсчета символов строки.  
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
12.09.2011, 19:00  [ТС] #23
Огромное спасибо -=ЮрА=- , ForEveR!!!!!!!!

Извините Юрий, что морочил голову, наверное это проблема с моим компилятором DEV-C++ или ему каких то библиотек не хватает (хотя раньше он меня не подводил, но честно говоря я только недавно начал изучение С++ ).

Сейчас поставил VS 6.0 и ВСЕ РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!

Спасибо ЮрА!!!!!!!!!!!!!!!!!!!!!!!!!
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
12.09.2011, 19:11 #24
Corvette, НЕ ДЕЛАЙ ЭТОГО. 6.0 уже давно не котируется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 19:11
Привет! Вот еще темы с ответами:

задача стоит так : Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту - C++
Вот код : #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int Fam...

Получить из строк новую строку, содержащюю первые N1 символов строки S1 и последнии N2 символов строки S2 - C++
помогите написать программу на двух разных классах! 2) Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк...

Задача звучит так: Пользователь вводит строку символов, удалить из этой строки каждый 3-й по счёту элемент - C++
Если кто поможет, буду очень благодарен: Пользователь вводит строку символов, удалить из этой строки каждый 3-й по счёту элемент.

Функция подсчета количества символов - C++
С помощью функции вывести на экран количество символов предложения. int fun(int s=strlen()){ return s; } Жалкая попытка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.09.2011, 19:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru