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

Подсчитать, сколько раз в строке встречаются одинаковые слова

21.12.2011, 00:59. Показов 9869. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана строка символов, состоящая из букв английского алфавита и пробелов. Напишите программу, которая подсчитывает, сколько раз в строке встречаются одинаковые слова (словом будем называть любую последовательность символов за исключением пробелов, слова разделяются одним пробелом)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2011, 00:59
Ответы с готовыми решениями:

Как определить, сколько раз встречаются одинаковые слова?
Есть файл inf.txt с предложением из нескольких строк, в котором есть одинаковые слова. Господа программисты помогите пожалуйста((.

Подсчитать сколько раз в заданной строке встречаются символы ‘a’ и ‘1’
Помогите плиз((( 1.Дана символьная строка S. Скопировать посимвольно ее в другую символьную строку. 2.Дана символьная строка S....

Подсчитать, сколько раз встречаются во введенной строке символы «а» и «м»
Написать программу на языке Ассемблера, которая позволяет ввести с клавиатуры строку символов, подсчитать, сколько раз встречаются во...

11
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
21.12.2011, 01:11
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 <sstream>
#include <map>
 
int main(){
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ){
        std::istringstream ist(str);
        std::map<std::string, int> map;
        
        while ( ist >> str )
            map[str]++;
        
        for ( std::map<std::string, int>::const_iterator i = map.begin(); i != map.end(); ++i )
            std::cout << i->first << "\t" << i->second << std::endl;
    }
    
    return 0;
}
1
19 / 19 / 5
Регистрация: 05.12.2008
Сообщений: 157
21.12.2011, 01:31
easybudda, замечательный код. А можно его усовершенствовать, что бы слова с разным регистром букв, но с одинаковым смыслом считались как одна группа?
к примеру используя strlwr(); в процессе подсчёта? Самому, что-то не получилось прилепить
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
21.12.2011, 01:39
Bumerang, можно. Обратите внимание на объявление класса map:
C++
1
2
template < class Key, class T, class Compare = less<Key>,
           class Allocator = allocator<pair<const Key,T> > > class map;
Нужно написать свой класс-функтор, в котором строки будут сравниваться так, как Вам нужно, и указывать его в шаблоне при объявлении объекта map вместо дефолтного less.
1
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 27
21.12.2011, 02:01  [ТС]
Чё та в TURBO C не работает кучу ошибок выкидывает!
0
19 / 19 / 5
Регистрация: 05.12.2008
Сообщений: 157
21.12.2011, 02:06
Дело в компиляторе или в "коппирляторе"
Я делал в DEV-C++. Почитайте/Опубликуйте ошибки, может ясней причина будет?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
21.12.2011, 02:37
Цитата Сообщение от makasin773 Посмотреть сообщение
Чё та в TURBO C не работает
И не будет. Три варианта: а - качать, устанавливать компилятор С++, выпущенный хтябы в этом веке и поддерживающий библиотеку STL; б - ждать альтруистов, может кто и возьмётся; в - искать на форуме. Точно знаю, что есть - сам когда-то делал, да и было много раз уже...


Цитата Сообщение от Bumerang Посмотреть сообщение
А можно его усовершенствовать, что бы слова с разным регистром букв, но с одинаковым смыслом считались как одна группа?
Кстати, в этом случае логичнее слова в верхний регистр переводить (ну или в нижний, без разницы), а то и работать неправильно будет, и с выводом не всё так гладко...
пример
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
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
#include <map>
 
std::string strtoupper(std::string s){
    for ( std::string::iterator i = s.begin(); i != s.end(); ++i )
        *i = toupper(*i);
    return s;
}
 
int main(){
    std::string str;
    
    while ( std::cout << "String: " && std::getline(std::cin, str) && ! str.empty() ){
        std::istringstream ist(str);
        std::map<std::string, int> map;
        
        while ( ist >> str )
            map[strtoupper(str)]++;
        
        for ( std::map<std::string, int>::const_iterator i = map.begin(); i != map.end(); ++i )
            std::cout << i->first << "\t" << i->second << std::endl;
    }
    
    return 0;
}
1
19 / 19 / 5
Регистрация: 05.12.2008
Сообщений: 157
21.12.2011, 03:20
Да, верно в верхний или наоборот. Все Чётко считает...
Тут еще, чисто академический интерес: что нужно применить, что бы Русские слова тоже считались с разными регистрами? ) С одинаковым размером русские считаются хорошо.
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
27.12.2011, 21:06
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
 
int main()
{
    char string[200];
    char *words[101];
    int i = 0, k = 0, n = 0;
 
    memset(words, 0, 100 * sizeof(void *)); //Обнуляем массив слов.
 
    printf("Enter string\n");
    gets(string);
 
    words[i++] = strtok(string, " ");        // Разделяем строку на слова
    while(words[i++] = strtok(NULL, " "));
 
    for(i = 0; i < 100; i++)
    {
        if(!words[i])                        // Ужасно написано, но оно работает!
            continue;
 
        for(k = i + 1, n = 1; k < 100; k++)
        {
            if(!words[k])
                continue;
 
            if(strcmp(words[i], words[k]) == 0)//Если такое слово уже есть
            {
                n++;                           //То запоминаем этот факт
                words[k] = 0;                  //И вычеркиваем это слово навсегда.
            }
        }
        
        printf("%s - %i\n", words[i], n);      //Печатаем красивый результат
    }
 
    system("pause");                           //можно удалить
 
    return 0;
}
Решение не очень прямое, но работает и выводит хорошо понятные результаты.
^_^
1
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 27
27.12.2011, 22:26  [ТС]
Цитата Сообщение от ProNoooob Посмотреть сообщение
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
 
int main()
{
    char string[200];
    char *words[101];
    int i = 0, k = 0, n = 0;
 
    memset(words, 0, 100 * sizeof(void *)); //Обнуляем массив слов.
 
    printf("Enter string\n");
    gets(string);
 
    words[i++] = strtok(string, " ");        // Разделяем строку на слова
    while(words[i++] = strtok(NULL, " "));
 
    for(i = 0; i < 100; i++)
    {
        if(!words[i])                        // Ужасно написано, но оно работает!
            continue;
 
        for(k = i + 1, n = 1; k < 100; k++)
        {
            if(!words[k])
                continue;
 
            if(strcmp(words[i], words[k]) == 0)//Если такое слово уже есть
            {
                n++;                           //То запоминаем этот факт
                words[k] = 0;                  //И вычеркиваем это слово навсегда.
            }
        }
        
        printf("%s - %i\n", words[i], n);      //Печатаем красивый результат
    }
 
    system("pause");                           //можно удалить
 
    return 0;
}
Решение не очень прямое, но работает и выводит хорошо понятные результаты.
^_^

В турбо си ругается на модуль Windows.h

Добавлено через 8 минут
А не модуль закаментил и задержку гетчем сделал всё работает БОльшое спасибо за помощь,ВЫРУЧИЛ!
0
79 / 79 / 8
Регистрация: 14.10.2009
Сообщений: 121
27.12.2011, 22:33
Цитата Сообщение от makasin773 Посмотреть сообщение
В турбо си ругается на модуль Windows.h
Так сотрите его. И сотрите строчку system("pause");
Такой трюк применяется для того, чтобы консоль сразу не закрывалась и можно было увидеть результат.
0
0 / 0 / 1
Регистрация: 13.06.2014
Сообщений: 29
30.11.2015, 23:58
Подскажите, пожалуйста, как в приведённом коде указать, чтобы подсчитывало только те слова, которые состоят из одной буквы?
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
 
int main()
{
    char string[200];
    char *words[101];
    int i = 0, k = 0, n = 0;
 
    memset(words, 0, 100 * sizeof(void *)); //Обнуляем массив слов.
 
    printf("Enter string\n");
    gets(string);
 
    words[i++] = strtok(string, " ");        // Разделяем строку на слова
    while(words[i++] = strtok(NULL, " "));
 
    for(i = 0; i < 100; i++)
    {
        if(!words[i])                        // Ужасно написано, но оно работает!
            continue;
 
        for(k = i + 1, n = 1; k < 100; k++)
        {
            if(!words[k])
                continue;
 
            if(strcmp(words[i], words[k]) == 0)//Если такое слово уже есть
            {
                n++;                           //То запоминаем этот факт
                words[k] = 0;                  //И вычеркиваем это слово навсегда.
            }
        }
        
        printf("%s - %i\n", words[i], n);      //Печатаем красивый результат
    }
 
    system("pause");                           //можно удалить
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2015, 23:58
Помогаю со студенческими работами здесь

Подсчитать, сколько раз в строке встречаются цифровые и буквенные символы
Цель работы: Сздать программу модульной структуры, т.е. имеющую в своём составе процедуры и/или функции. Дана строка. Подсчитать,...

Определить какие слова и сколько раз они встречаются в заданной строке
Ввести N слов и символьную строку. Определить какие слова и сколько раз они встречаются в заданной строке.

Определить сколько раз в строке встречаются слова, которые оканчиваются на букву 'к'?
вводится произвольная строка. определить сколько раз в этой строке встречаются слова, которые оканчиваются на букву 'к'. учесть что между...

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

Сколько раз встречаются подряд одинаковые числа
Ввести n чисел.. сколько раз встречаются подряд одинаковые числа. Если можно, с пояснением.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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