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

Работа со строчками (вывести в столбец все слова без повторений и количеством использования каждого слова)

05.06.2013, 23:11. Показов 3749. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ввести строку. Учитывая что строка может содержать слова которые повторяются, вывести в столбец все слова без повторений и количеством использования каждого слова. Регистр букв можно не учитывать если так будет легче написать программу.

Например строка:
Hello, World! This is the test program. Bye World.

Должно вывести:
Hello 1
World 2
This 1
is 1
the 1
test 1
program 1
Bye 1



уже третий день мучаюсь, помогите пожалуйста..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2013, 23:11
Ответы с готовыми решениями:

Напечатать все различные слова и для каждого слова указать количество повторений
Дан текст. Напечатать все различные слова и для каждого слова указать количество повторений. Различие строчных и прописных букв во внимание...

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

Вывести слова в столбец с указанием длины каждого слова
var s:string; i,k,m:byte; begin writeln('Vvedit PIB : '); readln(s); s:=s+' '; Writeln('Dovjuna ryadka : ',Length(s)); ...

11
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.06.2013, 23:15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <string>
 
typedef std::unordered_map<std::string, int> umap;
 
int main()
{
    std::ifstream ifs("input.txt");
    if (!ifs)
        return 1;
    umap m;
    std::string str;
    while(!ifs.eof() && ifs >> str)
        ++m[str];
    for (auto &word : m)
        std::cout << word.first << ' ' << word.second << std::endl;
}
1
7 / 7 / 1
Регистрация: 22.12.2012
Сообщений: 173
05.06.2013, 23:36  [ТС]
MrGluck, не работает. vs2010 выдает 6 ошибок...
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
05.06.2013, 23:45
gorus95, выкиньте vs2010
У меня все работает, просто код написан с использованием стандарта С++11 и требует компилятора поновее.

Добавлено через 2 минуты
Замените for-цикл по коллекции на обычный std::for_each и замените обычный ассоциативный массив (unordered_map) на отсортированный (map), иначе доступа к элементу по ключу, а не индексу не получите.

Не по теме:

Эх, в С++ бы ассоциат. массивы из PHP (как элемент ситаксиса)...

0
7 / 7 / 1
Регистрация: 22.12.2012
Сообщений: 173
05.06.2013, 23:46  [ТС]
MrGluck, я бы с радостью, но сдавать мне это нужно будет вообще на vs2008.
да и тем более с такого кода я понимаю смысл всего нескольких строк, а мне еще нужно будет объяснить как оно работает..(
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
06.06.2013, 00:02
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
#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <algorithm>
 
typedef std::map<std::string, int> mymap; // создаем синоним для map
 
void foo(const mymap::value_type &vt)
{
    std::cout << vt.first << ' ' << vt.second << std::endl;
}
 
int main()
{
    std::ifstream ifs("input.txt"); // открываем поток для считывания с файла
    if (!ifs) // если создать не удалось - возвращаем ошибку
        return 1;
    mymap m;
    std::string str;
    while(!ifs.eof() && ifs >> str) // пока не конец файла и считали строку
        ++m[str]; // инкремируем её счетчик в множестве m (второе число по ключу str)
    std::for_each(m.begin(), m.end(), foo); // для каждого элемента множества m вызываем функцию foo
}
Добавлено через 22 секунды
http://www.cplusplus.com/reference/map/map/
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.06.2013, 00:45
А от мое элегантно решение:
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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include <string>
using std::string;
#include <cstdlib>
using std::exit;
 
int main()
{
    string str="Hello, World! This is the test program. Bye World.";
    cout <<"vvedite ctroky... "<<endl;
    getline(cin,str);
    int pos=0;
    string s;
 
    //удаляем символы ,.! со строки
    s=",.!";
    pos=str.find_first_of(s);
    while(pos!=string::npos)
    {
        str.replace(pos,1,0,'!');
        pos=str.find_first_of(s);
    }
 
    //ищем слова и подсчитываем количество
    int count(0);
    pos=0;
    while(pos!=string::npos)
    {
        count=1;
        int pos2=str.find(' ',pos);
        if(pos2!=string::npos)
        {
            s=str.substr(pos,pos2-pos);
            int p=str.find(s,pos+1);
            while(p!=string::npos)
            {
                str.replace(p,s.length(),0,'1');
                count++;
                p=str.find(s,pos+1);
            }
            cout <<s<<" - "<<count<<endl;
            pos=pos2+1;
        }
        else
        {
            if(pos+1>=str.length())
                break;
            else
            {
                s=str.substr(pos);
                cout <<s<<" - "<<count<<endl;
                break;
            }
        }
    }
 
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
06.06.2013, 00:55
Цитата Сообщение от ninja2 Посмотреть сообщение
//удаляем символы ,.! со строки
erase нам не подходит?
0
06.06.2013, 01:21

Не по теме:

2
7 / 7 / 1
Регистрация: 22.12.2012
Сообщений: 173
06.06.2013, 12:52  [ТС]
ninja2, спасибо большое!

Добавлено через 14 минут
ninja2, можете еще немного объяснить этот кусок кода?
Кликните здесь для просмотра всего текста
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
while(pos != string::npos)
    {
        count = 1;
        int pos2 = str.find(' ', pos);
        if(pos2 != string::npos)
        {
            s = str.substr(pos, pos2-pos);
            int p = str.find(s, pos+1);
            while(p != string::npos)
            {
                str.replace(p, s.length(), 0, '1');
                count++;
                p = str.find(s, pos+1);
            }
            cout << s << " - " << count << endl;
            pos = pos2+1;
        }
        else
        {
            if(pos+1 >= str.length())
                break;
            else
            {
                s = str.substr(pos);
                cout << s << " - " << count << endl;
                break;
            }
        }
    }


Добавлено через 8 минут
если ввести 3 и больше одинаковых слов подряд, оно выводит информацию и зависает в бесконечном цикле...
например, попробуйте ввести
hello hello hello
результат будет
hello - 3
но программа не закончится...
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
06.06.2013, 15:27
Отак от будет нормально работать
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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include <string>
using std::string;
#include <cstdlib>
using std::exit;
 
int main()
{
    string str="Hello, World! This is the test program. Bye World.";
    cout <<"vvedite ctroky... "<<endl;
    getline(cin,str);
    int pos=0;
    string s;
 
    //удаляем символы ,.! со строки
    s=",.!";
    pos=str.find_first_of(s);
    while(pos!=string::npos)
    {
        str.replace(pos,1,0,'!');
        pos=str.find_first_of(s);
    }
 
    //ищем слова и подсчитываем количество
    int count(0);
    pos=0;
    while(pos!=string::npos)
    {
        count=1;
        int pos2=str.find(' ',pos);
        if(pos2!=string::npos)
        {
            s=str.substr(pos,pos2-pos);
            int p=str.find(s,pos+1);
            while(p!=string::npos)
            {
                str.replace(p,s.length(),0,'1');
                count++;
                if(count==100) break;
                p=str.find(s,pos+1);
            }
            if(count==100) break;
            cout <<s<<" - "<<count<<endl;
            pos=pos2+1;
        }
        else
        {
            if(pos+1>=str.length())
                break;
            else
            {
                s=str.substr(pos);
                cout <<s<<" - "<<count<<endl;
                break;
            }
        }
    }
 
    return 0;
}
Добавлено через 2 минуты
Это так гамнокодец, лучше конечно строку разбить на слова записать в массив, потом подсчитать количество слов и записать в другой массив их количество, затем ужи вывесит. Так лучше б было б.
0
7 / 7 / 1
Регистрация: 22.12.2012
Сообщений: 173
06.06.2013, 22:39  [ТС]
ninja2, я как раз и пытался так сделать, но потратил кучу времени, и ничего толкового не получилось(
спасибо еще раз, так даже лучше)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.06.2013, 22:39
Помогаю со студенческими работами здесь

Вывести в консоль все слова из текста (без повторений) в алфавитном порядке и с заглавной буквы
object prg1 extends App{ val text = &quot;я узнал что у меня есть огромная семья и тропинка и лесок я узнал что у меня есть огромная семья и...

Считать с консоли имя файла и вывести на экран все слова из него без повторений
Помогите, очень срочно! Необходимо считать с командной строки имя файла и вывести на экран все слова из него без повторений!!! Заранее...

Вывести слова текста с количеством повторений в данном тексте
Дан текст. Вывести слова текста с количеством повторений в данном тексте.

Вывести каждое слово из строки с количеством повторений слова в строке
Доброго времени суток.Объясните пожалуйста как работает прога. Ввести строку. Вывести каждое слово из этой строки с количеством...

Программа должна в заданном тексте найти каждое слово и вывести все слова в столбец (слова разделяются разделителями)
Ваша программа должна в заданном тексте найти каждое слово и вывести все слова в столбец (слова разделяются разделителями).


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru