26 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 278
1

Подсчет символов в строке

24.09.2019, 19:52. Показов 3219. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, написал простенькую программку, которая подсчитывает повторение всех символов в строке, но возникли следующие вопросы: 1) как сделать так, чтобы пробелы игнорировались и не учитывались при подсчете? 2) как сделать так, чтобы если ни один символ в строке не повторяется хотя бы 2 раза, то выводилось сообщение о том, что "символы не повторяются"?

Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <unordered_map>
#include <windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string str;  //создание строки
    getline(cin, str); //получение строки
    unordered_map<char, int> counting; //объявление мапа
    for (const char sim : str)
        ++counting[sim];
    for (const auto& num : counting)
        cout << "Элемент "<< "'"  << num.first << "'" << " встречается "<<" - " << num.second << " раз" <<endl;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2019, 19:52
Ответы с готовыми решениями:

Подсчет символов в строке
Помогите написать программу подсчета символов в строке. Спасибо.

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

Подсчет количества символов в строке
программа должна считать кол-во символов в строке но выдает 0 #include &quot;stdafx.h&quot; #include...

Подсчет количества символов в строке
Помогите, пожалуйста, разобраться. Строка (тип данных string) вводится с клавиатуры. Задача:...

7
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
24.09.2019, 19:56 2
Лучший ответ Сообщение было отмечено Komputershik как решение

Решение

Цитата Сообщение от Komputershik Посмотреть сообщение
1) как сделать так, чтобы пробелы игнорировались и не учитывались при подсчете?
В цикле добавить if (!isspace(sim))
Цитата Сообщение от Komputershik Посмотреть сообщение
2) как сделать так, чтобы если ни один символ в строке не повторяется хотя бы 2 раза, то выводилось сообщение о том, что "символы не повторяются"?
Если все символы уникальные, то размер строки == размер множества. Т.е просто сравнить counting.size() и str.size().
1
26 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 278
24.09.2019, 20:24  [ТС] 3
Новичок, так, спасибо, со вторым разобрался, а вот по поводу первого вопрос возник, а какое должно быть условие? if (!isspace(sim)) <тогда?>.
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
24.09.2019, 20:54 4
Komputershik, тогда ++counting[sim], логично же.
0
26 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 278
24.09.2019, 21:11  [ТС] 5
Новичок, тогда пробел просто скрывается, а можно сделать так, чтобы его программа совсем не воспринимала?

Добавлено через 8 минут
Новичок, решил просто удалить из строки пробелы с помощью цикла. спасибо за помощь
0
26 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 278
24.09.2019, 21:22  [ТС] 6
Новичок, еще вот один вопрос, а как сделать так, чтобы если символ повторяется один раз, его не выводило в программе? Покажу что получилось в итоге, чтобы не путаться. Вот код:

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
#include <iostream>
#include <string>
#include <unordered_map>
#include <windows.h>
 
using namespace std;
 
int main()
{
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string str;  //создание строки
    int dlina;
    getline(cin, str); //получение строки
    
    for (int i = 0; i < str.length(); i++) 
    {
        if (str[i] == ' ') 
        {
            str.erase(i, 1);
            i--;
        }
    }
 
 
    if (str.empty())
    {
        cout << "Файл пуст!";
        return 0;
    }
    unordered_map<char, int> counting; //объявление мапа
    
    for (const char sim : str)
    {
        ++counting[sim];
    }
 
    if (counting.size() == str.size() == 1)
    {
        cout << "\nСовокупность элементов является множеством. Повторяющиеся символы не обнаружены.\nМощность множества - " << str.length() <<endl;
    }
    else
    {
        cout << "\nСовокупность элементов не является множеством! В строке есть повторяющиеся символы:\n" << endl;
        for (const auto& num : counting)
            cout << "Элемент " << "'" << num.first << "'" << " встречается " << " - " << num.second << " раз" << endl;
    }
    system("pause");
}
И результат на скрине
Миниатюры
Подсчет символов в строке  
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
24.09.2019, 21:38 7
Лучший ответ Сообщение было отмечено Komputershik как решение

Решение

Komputershik, очевидно же. в строку 47 добавить
if(num.second!=1)

кстати никаких файлов в Вашей программе нет. только строка.
1
26 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 278
24.09.2019, 21:43  [ТС] 8
Yetty, спасибо! давно ничего не делал на си, знал и так не много, а сейчас совсем непривычно)) да, насчет файла, это я хотел сначала сделать загрузку строк из файлов, но потом мне стало лень, и я оставил ручной ввод) исправил
0
24.09.2019, 21:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2019, 21:43
Помогаю со студенческими работами здесь

Подсчет символов в строке. Программа не компилируется
Всем привет! Помогите решить эту задачу: 1) Имя передаётся через командную строку 2) Программа...

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

Подсчет в строке символов вводимых с клавиатуры
День добрый. Стоит задача ввести с клавиатуры строку потом вводим вторую строку и сравниваем...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru