Форум программистов, компьютерный форум CyberForum.ru

Определить количество слов в тексте - C++

Восстановить пароль Регистрация
 
ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 21:38     Определить количество слов в тексте #1
Разработать алгоритм и программу для определения количества слов в тексте
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
09.06.2013, 21:39
  #2

Не по теме:

поищи по форуму. было уже такое over9000 раз

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.06.2013, 21:52     Определить количество слов в тексте #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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 <sstream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
 
int words_count(const std::string & s) {
    std::istringstream ist(s);
    std::vector<std::string> vec;
    std::copy(std::istream_iterator<std::string>(ist), std::istream_iterator<std::string>(), std::back_inserter(vec));
    return vec.size();
}
 
int main() {
    std::string s;
    
    while ( std::cout << "String: " && std::getline(std::cin, s) && ! s.empty() )
        std::cout << words_count(s) << " words" << std::endl;
        
    return 0;
}
ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 22:04  [ТС]     Определить количество слов в тексте #4
а можно ли попроще программу. Я только начинаю изучать язык, и половину библиотек и различных функций, модулей не знаю?(
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
09.06.2013, 22:07     Определить количество слов в тексте #5
Не обязательно записывать в вектор, можно просто:
C++
1
2
3
4
5
6
7
8
int words_count(const std::string & s) {
    std::istringstream ist(s);
    std::string word;
    int counter = 0;
    while (ist >> word)
        counter++;
    return counter;
}
Добавлено через 1 минуту
Тут всего лишь надо понять как работает http://www.cplusplus.com/reference/s...istringstream/
Фактически, это так же, как и с std::cin, мы изначально инициализируем его некоторыми данными, а потом считываем с него как с обычного потока.
ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 22:19  [ТС]     Определить количество слов в тексте #6
Спасибо, конечно этого тоже не изучали. Но думаю, разобраться стоит, надеюсь получится))
easybudda
09.06.2013, 22:23
  #7

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Не обязательно записывать в вектор
Так гламурнее. Парадигма ТруЪ С++ - никаких явных циклов! Скопировали всё, что было, и размер вернули. И побоку, что просто в цикле посчитать и проще и быстрее...

ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 22:29  [ТС]     Определить количество слов в тексте #8
в векторах я вообще не шарю.... хоть даже это и гламурно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
09.06.2013, 22:32     Определить количество слов в тексте #9
easybudda, а можно линк почитать? Мне это кажется неочевидным.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.06.2013, 22:36     Определить количество слов в тексте #10
Цитата Сообщение от ann333 Посмотреть сообщение
этого тоже не изучали
Ну а потоки ввода/вывода изучали? Объект класса istringstream представляет собой поток ввода из переданной в его конструктор строки. Конструкция
Цитата Сообщение от MrGluck Посмотреть сообщение
while (ist >> word)
извлекает из этого потока по одному слову (набору символов отделённому пробелами) и
Цитата Сообщение от MrGluck Посмотреть сообщение
counter++;
подсчитывает, сколько слов удалось извлечь (когда слова кончатся, ist >> word вернёт false).

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
а можно линк почитать?
Это шутка такая. Пруфы можно где-нибудь на лурке поискать...

MrGluck
09.06.2013, 22:38
  #11

Не по теме:

Так и знал, что это сказки сишных эльфов и плюсоненавистников

ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 22:44  [ТС]     Определить количество слов в тексте #12
потоки нет. Символьный тип. стандартные функции, ну постоянные. (как объявлять при описании, обращаться к отдельным символам и т.д).
Я самые азы знаю. У нас только месяца 2 назад началось обучение
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.06.2013, 22:47     Определить количество слов в тексте #13
Цитата Сообщение от ann333 Посмотреть сообщение
потоки нет
а как вы выводите результат работы программы? почему-то догадываюсь, что через printf...
ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 22:49  [ТС]     Определить количество слов в тексте #14
Olivеr, ввод и вывод через cin, cout
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.06.2013, 23:00     Определить количество слов в тексте #15
Цитата Сообщение от ann333 Посмотреть сообщение
Olivеr, ввод и вывод через cin, cout
это и есть потоки.
cout - стандартный поток вывода, cin - стандартный поток для ввода
ознакомьтесь со строковым потоком stringstream. он не сложнее тех которыми Вы владеете
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.06.2013, 23:03     Определить количество слов в тексте #16
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ann333 Посмотреть сообщение
Символьный тип.
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>
 
using namespace std;
 
int main() {
    char str[256];
    
    while ( cout << "String: " && cin.getline(str, 255) && str[0] != '\0' ) {
        bool inWord = false;
        int wordsCount = 0;
        
        for ( int i = 0; true; ++i ) {
            if ( str[i] == ' ' || str[i] == '\t' || str[i] == '\0' ) {
                if ( inWord )
                    ++wordsCount;
                if ( str[i] == '\0' )
                    break;
                inWord = false;
            }
            else
                inWord = true;
        }
        
        cout << wordsCount << " words" << endl;
    }
    
    return 0;
}
ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 23:07  [ТС]     Определить количество слов в тексте #17
easybudda,
while ( cout << "String: " && cin.getline(str, 255) && str[0] != '\0' ) {
bool inWord = false;
объясни пожалуйста что это значит. Мы никогда после while не писали вот такой ввод.
cin.getline(str, 255) -что это означает??
а там вообщем я поняла)) спасибо
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.06.2013, 23:26     Определить количество слов в тексте #18
Цитата Сообщение от ann333 Посмотреть сообщение
while ( cout << "String: " && cin.getline(str, 255) && str[0] != '\0' )
В цикле выводится запрос на чтение строки, строка читается из потока ввода в выделенный массив, проверяется, что первый символ не равен '\0'. Первое условие вернёт false, если что-нибудь не так с потоком вывода (тяжёлый случай), второе вернёт false например, если вдруг закрыть поток ввода (в виндовс - в пустой строке нажать Ctrl+Z и Enter), третье - если введённая строка и в правду пустая (просто Enter нажать) - по задумке выход из программы.

Цитата Сообщение от ann333 Посмотреть сообщение
bool inWord = false;
логическая переменная, значение которой равно true, если текущий символ (str[i]) находится внутри "слова", то есть не является пробельным или символом завершения строки ('\0').

Добавлено через 2 минуты
Цитата Сообщение от ann333 Посмотреть сообщение
cin.getline(str, 255) -что это означает??
http://www.cplusplus.com/reference/i...tream/getline/
ann333
0 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 39
09.06.2013, 23:34  [ТС]     Определить количество слов в тексте #19
easybudda, доступно. огромное спасибо. Скажи, вот я делаю задерку экрана. Высвечивается окно, где необходимо ввести данные. Я ввожу, А ДАЛЕЕ результат появляется на секунду, и исчезает. Не подскажкшь, как его допустим хотя бы на пол минуты оставить. (другая программа, к этой не относится).
system("pause");
return 0;

для getch(); нужна еще библиотека conio.h
все пробывала. где моя ошибка??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 23:40     Определить количество слов в тексте
Еще ссылки по теме:

C++ Определить количество слов в тексте, состоящих из K букв. C#/C++
C++ Определить количество слов в тексте
C++ Определить количество слов в тексте и среднюю длину слова

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

Или воспользуйтесь поиском по форуму:
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.06.2013, 23:40     Определить количество слов в тексте #20
ann333, если подключена библиотека iostream, то можно добавить в конце программы cin.get();
То, что окно сразу закрывается может означать, что код приводит к рантайм ошибке
Yandex
Объявления
09.06.2013, 23:40     Определить количество слов в тексте
Ответ Создать тему
Опции темы

Текущее время: 12:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru