Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 1

Определить, сколько раз встречаются символы в строке

09.07.2018, 12:01. Показов 5008. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, должна быть программа которая выводит статистику допустим: hello world
выводит:
l - 3
o - 2
h - 1
e - 1
w - 1
r - 1
d - 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
д#include <iostream>
using namespace std;
 
int main() {
  int i = 0;
  int j = 0;
  int number[200];
  int Latter = 0;
  while (i < 200) {
   number[i] = 0;
    i++;
  }
  i = 0;
  char enter[200] = "";
  cin.getline(enter, 200);
  i = 0;
  while (i < 200) {
    if (enter[i] >= 'a' && enter[i] <= 'z') {
       Latter++;
    }
    i++;
  }
    Latter += 1;
  while (j < Latter) {
    if (enter[i] >= 'a' && enter[i] <= 'z') {
      if (enter[j] == enter[i]) {
       number[i] += 1;
      }
    }
    if (i == 200) {
      i = 0;
      j++;
    }
    i++;
  }
  i = 0;
  while (i < Latter) {
    if (number[i] == 0) {
        number[i]++;
    }
    i++;
  }
  j = 0;
  i = 0;
  // тут вывод должен быть
  return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2018, 12:01
Ответы с готовыми решениями:

Определить, какие символы и сколько раз встречаются в данной строке. C++
Дана строка. Определить, какие символы и сколько раз встречаются в данной строке.

Определить сколько раз в заданной строке встречаются указанные символы
Дана строка символов S. Определить сколько раз в ней встречается символ + и сколько раз символ *. Задачу реализовать двумя способами: с...

Определить все ли символы в строке встречаются только один раз
помогите написать программу на языке c++ Реализуйте алгоритм, определяющий, все ли символы в строке встречаются только один раз.

13
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
09.07.2018, 13:00
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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    string s;
    cout << "Enter string : ";
    getline(cin,s);
    while(s.find(' ') != s.npos)s.erase(s.find(' '),1);
    vector<int>count;
    vector<char>letter;
    vector<char>::iterator it;
 
    for(int i = 0;i<s.length();++i){
        it = find(letter.begin(),letter.end(),s.at(i));
        if(it == letter.end()){
            letter.push_back(s.at(i));
            count.push_back(1);
        } else ++count.at(it - letter.begin());
    }
    for(int i = 0;i<letter.size();++i){
        for(int j = i;j<letter.size();++j)if(count.at(j) > count.at(i)){
            swap(count.at(j),count.at(i));
            swap(letter.at(i),letter.at(j));
        }
    }
    for(int i = 0;i<count.size();++i)cout << letter.at(i) << " : " << count.at(i) << "\n";
 
    cout << endl;
    return 0;
}
1
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
09.07.2018, 13:12
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
#include <iostream>
using namespace std;
 
int main()
{
 char enter[200] = "";
 int arr[26]={0},i=0;
 int sort[26][2]={0,0};
 int temp=0,index;
 
 cin.getline(enter, 200);
 while(enter[i]!='\0')
    {
      arr[enter[i]-'a']++;
      i++;
    }
 for(i=0;i<26;i++)
     {
       for(int j=0;j<26;j++)
         if(temp<arr[j])
           { temp=arr[j];
             index=j;
           }
       sort[i][0]=index;
       sort[i][1]=temp;
       temp=0;
       arr[index]=0;
     }
 for(i=0;i<26;i++)
   if(sort[i][1]>0)
     cout<<(char) (sort[i][0]+'a')<<"   " <<sort[i][1]<<"\n";
 system("pause");
 return 0;
}
1
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
09.07.2018, 15:36
Лучший ответ Сообщение было отмечено IGPIGP как решение

Решение

собрать статистику проще всего так:

C++
1
2
3
4
    std::map<char, unsigned> letter2count;
    for (auto i : line) {
        ++letter2count[std::tolower(i)];
    }
сортировка по значению вещь неприятная. пытаясь писать минимум кода можно использовать multimap:
C++
1
2
3
4
    std::multimap<unsigned, char> count2letter;
    for (auto it = letter2count.begin(); it != letter2count.end(); ++it) {
        count2letter.insert(std::make_pair(it->second, it->first));
    }
печатаем результаты:
C++
1
2
3
    for (auto it = count2letter.begin(); it != count2letter.end(); ++it) {
        std::cout << it->first << "\t'" << it->second << "'\n";
    }
к сожалению, по умолчанию сортировка происходит по возрастанию, чтобы изменить это вместо
C++
1
std::multimap<unsigned, char> count2letter;
можно написать
C++
1
std::multimap<unsigned, char, decltype(std::greater<unsigned>())> count2letter;
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <map>
#include <functional>
 
int main() {
    std::string line("Hello, world!");
    //std::cin >> line;
 
    std::map<char, unsigned> letter2count;
    for (auto i : line) {
        ++letter2count[std::tolower(i)];
    }
    
    std::multimap<unsigned, char, decltype(std::greater<unsigned>())> count2letter;
    for (auto it = letter2count.begin(); it != letter2count.end(); ++it) {
        count2letter.insert(std::make_pair(it->second, it->first));
    }
 
    for (auto it = count2letter.begin(); it != count2letter.end(); ++it) {
        std::cout << it->first << "\t'" << it->second << "'\n";
    }
}
http://rextester.com/ZQRVCL91965
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.07.2018, 15:49
2 пути:
std::map<char, int>
массив char размером с алфавит + сортировка
1
09.07.2018, 18:35

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
массив char размером с алфавит + сортировка
Мимо запятых можно пролететь. Заглавные и прописные тоже имеет смысл различать. Потому как подобная статистика используется для дешифрования. Ещё могут быть интересны данные по началам и окончаниям слов, например. То есть, можно бы полный набор символов.

0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.07.2018, 19:24
Цитата Сообщение от IGPIGP Посмотреть сообщение
Мимо запятых можно пролететь
Если важны все знаки, то массив размером с 256 хватит.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2018, 19:58
Цитата Сообщение от MrGluck Посмотреть сообщение
Если важны все знаки, то массив размером с 256 хватит.
Для ASCII (не расширенного) по идее 128 можно.
Но главное, можно не зависеть от конкретного алфавита.
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
09.07.2018, 22:08
Цитата Сообщение от vijix Посмотреть сообщение
сперва те буквы которых больше потом которых меньше
Цитата Сообщение от MrGluck Посмотреть сообщение
Мимо запятых можно пролететь
с каких это пор знаки препинания стали буквами.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.07.2018, 23:38
Цитата Сообщение от повар1 Посмотреть сообщение
с каких это пор знаки препинания стали буквами.
Буквы, литеры, иэроглифы, цифири и т.д. это не категории программирования. В задании сказано на пальцах:
Цитата Сообщение от vijix Посмотреть сообщение
должна быть программа которая выводит статистику допустим: hello world
выводит:
l - 3
o - 2
h - 1
e - 1
w - 1
r - 1
d - 1
остальное, - более или менее произвольные толкования.
повар1, цитата, которую Вы привели из поста MrGluck, это мои слова. И они связаны с тем, например, что привязавшись к определённому алфавиту, придётся переписывать программу для другого. А статистика используемых символов может оказаться полезной в ряде приложений. И т.п. Но я не настаиваю и холивар вести не собираюсь.
0
Заблокирован
10.07.2018, 18:01
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
#include <iostream>
#include <unordered_map>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iterator>
 
using namespace std;
 
namespace std {
template <typename T1, typename T2>
    ostream& operator<<(ostream& out, const pair<T1, T2>& rhs) {
        out << rhs.first << " - " << rhs.second;
        return out;
    }
}
 
int main() {
    unordered_map<char, int> stats;
    string enter;   
    cin >> enter;
    
    for (const auto& c : enter) {
        stats[c]++;
    }
    
    using Pair = pair<char, int>;
    vector<Pair> v(stats.begin(), stats.end());
    sort(v.begin(), v.end(), [](const Pair& a, const Pair& b) -> bool {
        return a.second > b.second;
    });
    
    ostream_iterator<Pair> out(cout, "\n");
    copy(v.begin(), v.end(), out);
      
    return 0;
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.07.2018, 19:20
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <map>
#include <string>
#include<iomanip>
using namespace std;
 
int main() {
    map<char, int> stats;
    string enter;
    getline(cin, enter);
    cout<<enter<<endl;
 
    for (const auto& c : enter)
        {
            stats[c]++;
        }
    for(const auto& pair_in_map : stats)
     cout<< pair_in_map.first<<setw(24)<<pair_in_map.second<<endl;
    return 0;
}

tankist2018, тут в задании смысл похоже в том, чтобы на пальцах рассказать и на пальцах же и решить.
0
 Аватар для Babysitter
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
16.07.2018, 11:08
IGPIGP,

ты написал по сути решение из моего поста, который все успешно проигнорировали.
но при этом опустил все сложные вещи, которые были в задании, а именно вывод сортированным по значению (по убыванию), вместо лексикографически по ключу (по возрастанию).

пысы я думаю, по символам можно было бы итерировать не ссылкой, а значением - нет необходимости
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
16.07.2018, 16:51
Цитата Сообщение от Babysitter Посмотреть сообщение
но при этом опустил все сложные вещи, которые были в задании, а именно вывод сортированным по значению (по убыванию), вместо лексикографически по ключу (по возрастанию).
Babysitter, спасибо, - верно говорите. Не вник и поторопился. Ваше решение и правдв, именно то, что нужно.

Babysitter, в моём бложике есть код о поисковой самоупорядочиваемой структуре. Там помимо всего реализована модель владения при которой все вспомогательные структуры работают с итераторами владельца. То есть, параметром контейнеров является итератор контейнера. Я нигде раньше такого не встречал и подозреваю, что это моё изобретение. Попутно к тому что там изложено. Профит не только в экономии памяти и отсутствии небходимости в сырых или даже интеллектуальных указателях. Тут важно также отсутствие дублирование данных и полная защита от некосистентности. Последнее в данной задаче я делать не стану и буду работать с обоими контейнерами напрямую, для простоты изложения. Но выглядеть это может так:
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
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<iterator>
#include<algorithm>
 
using namespace std;
template<typename It>
struct
ComparePairByIter
{
    bool operator()( It it1, It it2)
    {
        return it1->second > it2->second;
    }
 
};
 
 
int main(int argv, char*argc[])
{
map<string, int>strings;
typedef  typename map<string, int>::iterator MapIter;
vector<MapIter>orderedByFreqReversed;
cout<<"Enter your text as continuous string finishing by the pressing\
    Enter key and the Ctrl+Z \n";
   istream_iterator<string> inp_it_begin(cin), inp, inp_end;
do
{
    string str=*inp_it_begin++;
    MapIter map_iter=strings.find(str);
    if(map_iter == strings.end())
    {
        pair<string, int> ins_pair(str,1);
        pair<map<string, int>::iterator,bool> pairIfIsInserted=
         strings.insert(ins_pair);
             orderedByFreqReversed.push_back(pairIfIsInserted.first);
    }
    else ++(map_iter->second);
 
 
}while(inp_it_begin != inp_end);
 
sort(
     orderedByFreqReversed.begin(),
     orderedByFreqReversed.end(),
     ComparePairByIter<MapIter>()
     );
 
for(auto mappair:strings)cout<<mappair.first<<' '<<mappair.second<<endl;
cout<<"\n\n_________________________\n\n";
for(auto the_mapiter:orderedByFreqReversed)cout<<the_mapiter->first<<' '<<the_mapiter->second<<endl;
 
 cin.get();
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.07.2018, 16:51
Помогаю со студенческими работами здесь

Ввести строку и слово. Определить и вывести, сколько раз встречаются в строке буквы, перечисленные в слове.
Ввести строку и слово. Определить и вывести, сколько раз встречаются в строке буквы, перечисленные в слове. Ha Cu. Заранее...

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

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

Дан массив символов. Посчитать, сколько раз встречаются данные символы
Определить сколько раз встречаются * : ; такие символы

Оставить в строке только те символы, которые встречаются один раз
Где ошибка??? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; int...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru