Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816

Подсчет слов

25.08.2016, 21:05. Показов 1556. Ответов 10

Студворк — интернет-сервис помощи студентам
Написал функцию для подсчета слов в файле:

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
while (file) {
 
        //Считывание очередного символа
        ch = file.get();
 
        //Если прочитанный символ является пунктуационным, пробельным или
        //признаком конца файла
        if (ispunct(ch) || isspace(ch) || ch == EOF) {
 
            //А до этого набиралось слово
            if (isWord) {
 
                //Сбрасываем флаг
                isWord = !isWord;
 
                //Производим вывод
                cout << content << endl;
                content = "";
 
            }
 
        } else {
 
            //Иначе был прочитан цифро-буквенный символ. Добавляем его
            //в контейнер
            content += ch;
 
            if (!isWord) {
 
                isWord = !isWord;
 
            }
 
        }
Все хорошо, но только если ввести, например ".cat.cat", что не считается словом, то код всё равно дважды напечатает cat. Помогите избавиться от этого? Т.е. словом должно считаться то, что спереди отделено n количеством пробелом или началом файла, а после должно идти знаки препинания или пробелы.

Добавлено через 26 минут
Справился.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2016, 21:05
Ответы с готовыми решениями:

Подсчёт слов в строке. Подсчёт символов в словах строки
Начал изучение строк в С++. Решая задачу по поиску количества строк и количеству указанных символов упёрся лбом в стену. Теорию понял:...

Ввод слов в массив и подсчёт введённых слов
как можно решить эту задачу:Напишите программу,использующую массив char и цикл для чтения по одному слову за раз до тех пор,пока не будет...

Подсчет слов
Посмотрите плиз, что не так с кодом. Бред скорее всего. Прога и работает, и нет одновременно. Смотря, что ввожу. #include...

10
Искусственный интеллект
 Аватар для NQUARE
112 / 82 / 34
Регистрация: 26.08.2020
Сообщений: 590
Записей в блоге: 1
14.09.2020, 15:31
Цитата Сообщение от Nishen Посмотреть сообщение
Справился.
Как, не подскажете?
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816
14.09.2020, 16:04  [ТС]
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
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
 
 
 
void split(const std::string& text, std::vector<std::string>& container) {
 
    std::istringstream iss(text);
    std::string word;
 
    while (iss >> word)
        container.push_back(word);
 
}
 
 
 
int main() {
 
    std::string text = "English texts for beginners to practice reading and comprehension online and for free. Practicing your comprehension of written English will both improve your vocabulary and understanding of grammar and word order.";
    
    std::vector<std::string> words;
 
    split(text, words);
 
    for (const auto& word : words)
        std::cout << word << '\n';
 
    return 0;
 
}
1
Искусственный интеллект
 Аватар для NQUARE
112 / 82 / 34
Регистрация: 26.08.2020
Сообщений: 590
Записей в блоге: 1
15.09.2020, 19:43
Спасибо, только вот почему вы не используйте using namespace std;?))
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816
19.01.2021, 16:14  [ТС]
Цитата Сообщение от NQUARE Посмотреть сообщение
Спасибо, только вот почему вы не используйте using namespace std;?))
Это привычка. Говорят, что с помощью такой привычки можно избежать конфликта имен из разных пространств.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
19.01.2021, 18:42
Nishen, и слова будут вместе со знаками препинания ...
например
free.
Печалька, а я уже на халяву надеялся )

Добавлено через 4 минуты
Суть в том что Вы Nishen, сделали парсинг слов стандартный (обрамленный пробелами)
И в этом нет абсолютно никакой ценности или новизны.

Добавлено через 1 минуту
похоже на какую-то самопиарщину...
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816
19.01.2021, 18:52  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
похоже на какую-то самопиарщину...
Похоже на агрессивное поведение, но я неуязвим в этом плане. Можешь написать лучше/иначе - бери и делай.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
19.01.2021, 19:31
Nishen, мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void split(const std::string& text, std::vector<std::string>& container) {
    std::string punc(" \t\n\r,.;-:");
    std::string temp = "";
    for (size_t i = 0; i < text.size(); ++i)
    {
        if (punc.find(text.at(i)) == std::string::npos)
            temp += text.at(i);
        else
        {
            if (temp.size() != 0)
            {
                container.push_back(temp);
                temp = "";
            }
        }
    }
    if (temp.size() != 0)
    {
        container.push_back(temp);
        temp = "";
    }
}
0
Just Do It!
 Аватар для XLAT
4211 / 2668 / 655
Регистрация: 23.09.2014
Сообщений: 9,082
Записей в блоге: 3
19.01.2021, 20:31
Цитата Сообщение от liv Посмотреть сообщение
мой вариант:
на следующие четыре года:
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
#include <iostream>
#include <string>
#include <vector>
 
void split(const std::string& text, std::vector<std::string>& container)
{   const std::string punc(" \t\n\r,.;-:");
    for(size_t i, e = 0; 
            (i = text.find_first_not_of(punc, e)) != std::string::npos;)
    {   if( (e = text.find_first_of    (punc, i)) == std::string::npos )
             e = text.size();
        container.emplace_back(text.substr(i, e - i));
    }
}
 
///----------------------------------------------------------------------------|
/// Тест.
///----------------------------------------------------------------------------:
int main()
{   std::vector<std::string> container;
    std::string s = ".:qwerrty.. ::zxc...12345,.";
    split(s, container);
    
    for(const auto& e : container)
    {   std::cout << e << '\n';
    }
}
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
19.01.2021, 21:54
Цитата Сообщение от Nishen Посмотреть сообщение
Можешь написать лучше/иначе - бери и делай.
Уже давно написано.

Хоть и не так компактно и кратко как у XLAT

Поиск слов в строке
0
20.01.2021, 08:25

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
похоже на какую-то самопиарщину...
Я извиняюсь, где? Пост от Nishen датирован 2016 годом, а сейчас просто кто-то поднял тему.
При чем здесь ценность и новизна, если в 2016 году товарищ решал, видимо, учебное задание, а сейчас кто-то попросил показать решение, к которому он тогда пришел?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2021, 08:25
Помогаю со студенческими работами здесь

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

Подсчет слов в предложении
Написала программу, но в ней есть ошибка. Самой найти не получается, программа считает знак &quot;-(тире)&quot; за отдельное слово....

Подсчет слов (Counter)
Народ помогите пожалуйста написать функцию подсчета слов вот задание Написатьпрограммуна языке C++,...

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

Подсчет слов в тексте
Помогите сделать в програме подсчет независимо от регистра букв. #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru