Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 11.01.2017
Сообщений: 17
1

Подсчитать количество повторений символов входящих в состав введенной строки

12.01.2017, 14:36. Просмотров 5986. Ответов 12
Метки нет (Все метки)

Задача: написать программу, которая считает, сколько раз каждый символ, входящий в состав введенной строки, встречается в ней. Информацию по каждому символу выводить 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
#include <iostream>
#include<cstring>
#include<cstdio>
using namespace std;
 
char func()
{
 
char str[100];
int counter=0;
int N=strlen(str);
cout<<"Введите строку: "<<endl;
gets(str);
cout<<"Вот ваша строка: "<<str<<endl;
 
 
for(int i=0;i<N;i++)
 
    {
      if(i>0)
   for(int k=(i-1);k>=0;k--)
      if(str[k]==str[i])continue;
{
  cout<<str[i]<<" - ";
  for(int j=0;j<N;j++)
    if(str[i]==str[j])
 
      counter++;
    cout<<counter<<endl;
            counter=0;
 
}
return counter;
}
}
 
int main()
{
setlocale(LC_ALL, "Russian");
 
    func();
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2017, 14:36
Ответы с готовыми решениями:

Множества. Во введенной строке символов подсчитать количество различных (без повторений) букв
4.Во введенной строке символов, содержащей прописные буквы русского алфавита,подсчитать количество...

Количество повторений элементов заданного множества символов во введенной строке
Ребят ,нужна помощь,как можно переделать эту программу только через указатели? Вот задание на...

Подсчитать количество символов ‘c’ и ‘d’ во введенной строке и определить, каких из символов больше
Подсчитать количество символов ‘c’ и ‘d’ во введенной строке и определить, каких из символов ‘c’...

Подсчитать количество знаков, цифр, входящих в строку символов
Подсчитать количество знаков, цифр, входящих в строку символов. И вывести на экран отдельно...

12
0 / 0 / 0
Регистрация: 11.01.2017
Сообщений: 17
12.01.2017, 14:38  [ТС] 2
Вот результат работы программы
0
Миниатюры
Подсчитать количество повторений символов входящих в состав введенной строки  
1235 / 1001 / 461
Регистрация: 25.12.2016
Сообщений: 3,246
12.01.2017, 14:50 3
Ошибка в 11 строке:
C++
1
int N=strlen(str);
Здесь вычисляется длина строки str до того, как пользователь её введёт. Перемести эту строку чуть пониже, после gets.

И ещё, зачем нужно вот это: return counter? Я бы эту строку вообще убрал.
1
0 / 0 / 0
Регистрация: 11.01.2017
Сообщений: 17
12.01.2017, 15:05  [ТС] 4
Переместила, поставила после gets, но он все равно считает только первый символ..
0
Миниатюры
Подсчитать количество повторений символов входящих в состав введенной строки  
561 / 171 / 57
Регистрация: 04.05.2012
Сообщений: 793
Записей в блоге: 1
12.01.2017, 15:18 5
maslenkovas, оператор из строки 33 return counter;
Надо поставить вне цикла.
То есть в конце Вашей функции.

Добавлено через 11 минут
maslenkovas, совет на будущее, когда не можете найти ошибку, ставьте брейкпоинт, и проходите программу по шагам, тогда Вы сможете всегда найти ошибку.
1
0 / 0 / 0
Регистрация: 11.01.2017
Сообщений: 17
12.01.2017, 15:19  [ТС] 6
Юля_программист, спасибо! Теперь выводит всю строку!))
Но по-прежнему не по одному разу символ, L два раза вывел..
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
#include <iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
 
char func()
{
 
char str[100];
int counter=0;
cout<<"Введите строку: "<<endl;
gets(str);
int N=strlen(str);
cout<<"Вот ваша строка: "<<str<<endl;
 
 
for(int i=0;i<N;i++)
 
    {
      if(i>0)
   for(int k=(i-1);k>=0;k--)
      if(str[k]==str[i])continue;
{
  cout<<str[i]<<" - ";
  for(int j=0;j<N;j++)
    if(str[i]==str[j])
 
      counter++;
    cout<<counter<<endl;
            counter=0;
 
}
 
}return counter;
}
 
int main()
{
setlocale(LC_ALL, "Russian");
func();
 
return 0;
 
}
0
Миниатюры
Подсчитать количество повторений символов входящих в состав введенной строки  
1235 / 1001 / 461
Регистрация: 25.12.2016
Сообщений: 3,246
12.01.2017, 15:38 7
Лучший ответ Сообщение было отмечено maslenkovas как решение

Решение

Несколько общих замечаний:
1) Код обязательно нужно выравнивать, иначе сложно отследить логику его работы.
2) Зачем возвращать из функции func значение, которое потом не используется? И какой смысл имеет это значение?
3) В 23 строке оператор continue относится к ближайшему циклу (который начинается в 22 строке), а не ко всему большому циклу (18 строка), как видимо предполагалось. Чтобы перейти к следующему шагу внешнего цикла можно использовать такой способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    for(int i=0; i<N; i++)
    {
        bool uniqueSymbol = true; // признак того, что символ ранее не встречался
        if (i>0)
            for(int k=(i-1); k>=0; k--)
                if(str[k]==str[i])
                    uniqueSymbol = false;
 
        if (uniqueSymbol)
        {
            cout<<str[i]<<" - ";
            for(int j=0; j<N; j++)
                if(str[i]==str[j])
 
                    counter++;
            cout<<counter<<endl;
            counter=0;
        }
 
    }
2
0 / 0 / 0
Регистрация: 11.01.2017
Сообщений: 17
12.01.2017, 15:59  [ТС] 8
likehood, Спасибо большое!
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
12.01.2017, 17:45 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <unordered_map>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::unordered_map<char, int> um;
    for (const char c : str)
        ++um[c];
    for (const auto &p : um)
        std::cout << p.first << " - " << p.second << std::endl;
}
0
1235 / 1001 / 461
Регистрация: 25.12.2016
Сообщений: 3,246
12.01.2017, 18:17 10
MrGluck, правильно ли я понимаю, что в приведённом коде um[c] по-умолчанию устанавливает нулевое значение, если такого ключа раньше не было?
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
12.01.2017, 20:48 11
Цитата Сообщение от likehood Посмотреть сообщение
um[c] по-умолчанию устанавливает нулевое значение, если такого ключа раньше не было?
Да. И сразу инкрементирует его.
1
1463 / 928 / 808
Регистрация: 30.04.2016
Сообщений: 3,212
12.01.2017, 23:35 12
maslenkovas, у меня есть несколько вариантов решения данной задачи, но мне нужно знать важно ли вам сохранить порядок символов в предложении?
0
238 / 34 / 6
Регистрация: 05.05.2012
Сообщений: 506
11.10.2019, 18:46 13
Fixer_84, а напишите, пожалуйста, Ваши варианты
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2019, 18:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подсчитать количество символов во введённой строке
а)Составить программу, которая будет подсчитывать количество символов во введённой строке....

Подсчитать и вывести количество различных символов, входящих в заданное слово
в заданном слове подсчитать и вывести количество разних символов входящих в него

Во введенной строке подсчитать количество гласных символов
Делаю семестровку. Задание такое: разработать программу на языке Ассемблера Интелx86 для ДОС....

Во введенной строке символов подсчитать количество разделителей
Во введенной строке символов подсчитать количество разделителей (любые скобки, точка, запятая,...


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

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

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