Вопрос № 173263: Доброго времени суток, уважаемые эксперты! Помогите решить одну задачку: «Дана строка, содержащая пробелы. Найдите, сколько в нем слов Вход: На вход подается несколько строк. Входная строка должна считываться методом getline. Выход: количе...
Вопрос № 173263:
Доброго времени суток, уважаемые эксперты! Помогите решить одну задачку: «Дана строка, содержащая пробелы. Найдите, сколько в нем слов Вход: На вход подается несколько строк. Входная строка должна считываться методом getline. Выход: количество слов в первой из введенных строк.»
Отправлен: 14.10.2009, 09:29
Вопрос задал: Kwant, Посетитель
Всего ответов: 3 Страница вопроса »
Отвечает Dr_Andrew, Модератор :
Здравствуйте, Kwant! Это простейший вариант решения. Число слов в строке будем считать равным числу пробелов, разделяющих слова, плюс 1 (предполагается, что после последнего слова в строке пробела нет). Число пробелов считаем, передвигаясь по символам первой строки в функции CheckGaps, которая и возвращает число пробелов. В остальном см. приложение. Вывод программы:
Введите первую строку: Ко мне на заре в сновиденье Введите вторую строку: Пришла моя мать... Не гони её Введите третью
строку: Криком своим, кукушка! Первая строка содержит 6 слов.
Приложение:
Ответ отправил: Dr_Andrew, Модератор
Ответ отправлен: 14.10.2009, 09:53 Казахстан, Алма-Ата Организация: Казахский научный центр карантинных и зоонозных инфекций Адрес сайта:Медицинские программы для Linux ICQ # 256452186
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 255401
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Micren, Бакалавр :
Здравствуйте, Kwant. Программа. C++. MS VS 2008.
// Разделители слов. В данном случае пробел. Добавьте
что считаете нужным. const wchar_t delimiters[]=L" ";
// Подсчитывает кол. слов в строке size_t wordsCount(const wstring& str) { size_t count=0; // Индекс текущего символа wstring::size_type cur=0; // Ищем первый не разделитель и пока есть такие while((cur=str.find_first_not_of(delimiters,cur))!=wstring::npos) { // Инкрементируем счетчик ++count; // Ищем конец слова(разделитель) cur=str.find_first_of(d
elimiters,cur); } return count; }
// ---------------- Второй способ --------------------------------------------------- // Функтор, используемый ниже, для проверки символа на предмет является ли он разделителем class isDelimPred:public unary_function<wchar_t,bool> { public: result_type operator()(argument_type ch)const { #pragma warning(disable:4800) return iswspace(ch); } };
// Вторая функция делающая то же самое только слегка по другому size_t
wordsCount2(const wstring& str) { size_t count=0; wstring::const_iterator cur=str.begin(),end=str.end(); while((cur=find_if(cur,end,not1(isDelimPred())))!=end) { ++count; cur=find_if(cur,end,isDelimPred()); } return count; } // --------------------------------------------------------------------------------------
int main() { locale::global(locale("russian_russia.866")); wcout<<L&qu
ot;Введите строку:"<<endl; wstring str; getline(wcin,str); wcout<<L"Количество слов в строке:"<<wordsCount(str)<<endl; system("PAUSE"); return 0; }
Пример работы:
Код:
Введите строку: Сколько же здесь
слов? Количество слов в строке:4
В программе 2 функции: wordsCount() - подсчитывает количество слов в строке. Разделителями считаются символы входящие в строку delimiters. wordsCount2() - для учета разделителей использует ф-ю iswspace(). Т.е. разделителями считается не только пробел, но и любые whitespaces. Для этого реализован функтор. Если Вам это не надо можете смело удалить.
Ответ отправил: Micren, Бакалавр
Ответ отправлен: 14.10.2009, 10:47
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 255403
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Kwant. Если класс string не нужен, а работать с char[], то можно реализовать так, как в приложении.