Консультация № 136843
14.05.2008, 20:23
0.00 руб.
0 1 1
Здравствуйте! Помогите пожалуйста решить такую задачку на Си++:
Подсчитать количество слов в строке с использованием стандартных функций библ. файла <string.h>.
Лично я думаю что можно сначала подсчитать количество всех пробелов между словами, пусть это количество будет n,
тогда количество слов будет n + 1, конечно если между словами будет не больше одного пробела.
Или может есть способ ещё проще? Если можно с обьяснениями в коде. Заранее спасибо!

Обсуждение

Неизвестный
15.05.2008, 09:19
общий
это ответ
Здравствуйте, Sashka!
Метод будет работать если слова разделяются только одним пробелом. А если их несколько ? А если это вообще не пробелы, а, например, запятые ? В приложении вы найдете пример разбора строки по словам с использованием класса string из STL и его методов. Программа комментирована, поэтому алгоритм работы можно понять из кода. Компилятор MS VS 2005.

Приложение:
#include <string>#include <iostream>using namespace std;int main(int argc, char* argv[]) { //Разделители слов string delimiters(" .,:;"); //Строка для разбора string text = "This is a :; test,. string"; //Индексы для обозначения начала и конца слов string::size_type beg = 0; string::size_type end = 0; //Счетчик слов int words_count = 0; //Выводим начальную строку cout << "Initial string:" << endl << text << endl << endl << "Words:" << endl; //Пока находим символы отличный от разделителей while((beg = text.find_first_not_of(delimiters, end)) != string::npos) { //Ищем первый после индекса beg разделитель слов end = text.find_first_of(delimiters, beg); //Если такого нет if(end == string::npos) //Устанавливаем конец слова на конец строки end = text.length(); //Выводим слово cout << text.substr(beg, end - beg) << endl; //Увеличиваем счетчик слов words_count++; } //Выводим количество слов cout << endl << "Words count: " << words_count << endl; return 0;}
Форма ответа