Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
QWERY_2012
5 / 5 / 1
Регистрация: 09.09.2012
Сообщений: 227
1

Посчитать количество по каждой букве в string?

08.11.2012, 20:43. Просмотров 757. Ответов 8
Метки нет (Все метки)

Необходимо посчитать количество каждой буквы (английского алфавита) в string:

Могу посчитать кол-во слов и letters в общем - но как сделать по каждой ?

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
#include <iostream> 
#include <string> 
#define MAXNUM 1000
 
 
 
 
using namespace std;
 
 
      int countchars(char[]);
      int countwords(char []);  //function returns the number of words in the string 
 
int main() 
{
    char list[MAXNUM];
    
   
    int numwords, numchar;
    
        cout << "Homework 10: Solution to Project 1.\n"; 
        
        cout << "\n Enter a text string to test:\n";
        cin.getline(list, 80); 
        
       
            numwords = countwords(list);
            numchar = countchars(list);
    
            cout << "\n There are " << numwords <<  " words in that text.\n";
            cout << "\n There are " << numchar <<  " letters in that text:\n\n";
            
            
            
    
    
    system("Pause");
    return 0;
}
   
   
  
   
   
           int countwords(char list[])
           #define YES 1
           #define NO 0
           {
           int i, inaword, count = 0; 
       
           inaword = NO;
           for(i = 0; list[i] != '\0'; i++)
           {
               if (list[i] == ' ')
                 inaword = NO;
               else if (inaword == NO)
               {
                    inaword = YES;
                    count++;
               }
               }
         
               return(count);
       
               }
               
               
                int countchars(char list[])
   {
       int i, count = 0;
       
       for ( i = 0;  list[i] != '\0'; i++) 
        if(isalpha(list[i])) 
            count++;
  
         return(count);
       }
Должно быть:
Character: A Count: 2
Character: B Count: 2
Character: C Count: 3

и т.д.

Добавлено через 23 минуты
Counting the occurrences of each character becomes simpler when you remember that char type values are simple integers. The values 'A' and 'Z' are simple numbers, and a loop can easily take a char type loop control variable through all the values from 'A' to 'Z'.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 20:43
Ответы с готовыми решениями:

Посчитать количество всех букв и количество вхождений каждой буквы
Есть файл из нескольких строк. нужно: 1 посчитать количество всех букв 2...

Посчитать количество звездочек в каждой строке
4. Пусть даны натуральное число n и символьная квадратная матрица порядка n....

Посчитать количество вхождений каждой буквы в строке
Мне нужно сначала: -спросить у человека строку -надо посчитать количество...

Посчитать количество вхождений каждой буквы в строке
Мне нужно сначала: -спросить у человека строку -надо посчитать количество...

Посчитать количество подряд идущих символов в каждой строке
привет всем. очень нужна помощь. бо бьюсь об неё уже не один день. дело в...

8
JlightenDev_C++
63 / 63 / 33
Регистрация: 12.08.2012
Сообщений: 150
08.11.2012, 21:24 2
Просто пройдись по массиву символов и сравнивай каждый символ с нужной тебе буквой, если они равны то +1 в соответственную переменную или в соответственный элемент массива. (например a[0] это будет буквой A).

Добавлено через 8 минут
Например так
C++
1
2
3
4
5
6
7
8
9
char str[size];
char a[size_a] = {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z} //size_a = 26
for(int i = 0; i < size; i++)}{
        for(int j = 0; j < size_a; j++){
                if(str[i] == a[j]){
                            a[j] = a[j] + 1;
                            }
                }
        }
1
QWERY_2012
5 / 5 / 1
Регистрация: 09.09.2012
Сообщений: 227
08.11.2012, 21:24  [ТС] 3
ОК, понятно на как бы это на С++ реализовать (не пойму)?
0
JlightenDev_C++
63 / 63 / 33
Регистрация: 12.08.2012
Сообщений: 150
08.11.2012, 21:25 4
Я отредактировал пост, смотри пример.
1
QWERY_2012
5 / 5 / 1
Регистрация: 09.09.2012
Сообщений: 227
08.11.2012, 21:49  [ТС] 5
Спасибо!!!

Добавлено через 17 минут
Вопрос а как считать не зглавные буквы - на выходе все необходимо.

Хотя в примере выводят все как заглавные: т.е. если встречается а то считается как А.
Что-то совсем запутался .



Что писать на cout <<?

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
#include <iostream> 
#include <string> 
#define MAXNUM 1000
 
 
 
 
using namespace std;
 
 
      
int main() 
{
 
 
 char list[MAXNUM];
 
 
 cout << "\n Enter a text string to test:\n";
        cin.getline(list, 80); 
 
 
char a[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; //size_a = 26
 
for(int i = 0; i < 26; i++)
{
        for(int j = 0; j < 26; j++)
        {
                if(list[i] == a[j])
                {
                            a[j] = a[j] + 1;
                            }
                }
        }
        
        cout << "\n There are " << .......; 
         
            system("Pause");
    return 0;
}
0
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
08.11.2012, 22:01 6
Воспользуйтесь map.

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <map>
 
int main()
{
    std::map <char, size_t> chars;
    std::string str = "Several specializations for common character types are provided.";
    size_t i = 0;
    while (str[i++])
        chars[ str[i] ]++;
    for (auto it = chars.cbegin(); it != chars.cend(); it++)
        std::cout<<(*it).first<<": "<<(*it).second<<std::endl;
    system("pause");
    return 0;
}
0
Петррр
6160 / 3461 / 897
Регистрация: 28.10.2010
Сообщений: 5,926
08.11.2012, 22:03 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
#include <cctype>
 
int main()
{
    std::string str;
    std::cout << ">>>";
    std::getline(std::cin, str);
    std::string::size_type len = str.size();
    for (char c = 'A'; c <= 'Z'; c++)
    {
        std::size_t ch_count = 0;
        for (int i = 0; i < len; i++)
            if (str[i] == c || str[i] == tolower(c))
                ch_count++;
        if (ch_count != 0)
            std::cout << c << ": " << ch_count << std::endl;
    }
    return 0;
}
0
QWERY_2012
5 / 5 / 1
Регистрация: 09.09.2012
Сообщений: 227
08.11.2012, 22:13  [ТС] 8
Спасибо!
0
rangerx
1942 / 1551 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
08.11.2012, 22:54 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cctype>
 
using namespace std;
 
int main() {
 
    const int n = (('Z' - 'A') + 1);    
    int arr[n] = {0};
    
    char str[256];
    cin.getline(str, sizeof(str));
 
    for(int i = 0; str[i]; ++i)
        if(isalpha(str[i]))
            ++arr[toupper(str[i]) - 'A'];
 
    for(int i = 0; i < n; ++i)
        cout << static_cast<char>('A' + i) << " -> " << arr[i] << endl;
}
0
08.11.2012, 22:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 22:54

Как посчитать количество повторений каждой из цифр в числе N*N?
я очень плохо ориентируюсь на С++.Такой вопрос:можно числа переводить в...

Посчитать количество слов в каждой строке текстового файла
пусть дан текстовый файл. создайте файл целых чисел, в котором каждой строке...

Посчитать количество чисел в каждой строке текстового файла
можете помочь с вопросом как посчитать количество чисел в каждой строке...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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