Подсчет слов во введенной строке - C (СИ)
Формулировка задачи:
Как в этой сделать чтоб считала сколько слов ввели?
#include <iostream>
#include <string>
#include <sstream>
int vowels_count(const std::string & s){
static const std::string VOW("AaEeIiOoUuYy");
int cnt(0), pos(0);
while ( ( pos = s.find_first_of(VOW, pos) ) != std::string::npos ){
++cnt;
++pos;
}
return cnt;
}
int main(){
const int NEEDED(3);
std::string buf;
while ( std::cout << "String: " && std::getline(std::cin, buf) && ! buf.empty() ){
std::istringstream ist(buf);
int cnt(0);
while ( ist >> buf )
if ( vowels_count(buf) >= NEEDED && ++cnt )
std::cout << buf << std::endl;
std::cout << cnt << " words." << std::endl;
}
return 0;
}Решение задачи: «Подсчет слов во введенной строке»
textual
Листинг программы
#include <iostream>
#include <string>
#include <sstream>
int vowels_count(const std::string & s){
static const std::string VOW("AaEeIiOoUuYy");
int cnt(0), pos(0);
while ( ( pos = s.find_first_of(VOW, pos) ) != std::string::npos ){
++cnt;
++pos;
}
return cnt;
}
int main(){
const int NEEDED(3);
std::string buf;
size_t c;
while ( std::cout << "String: " && std::getline(std::cin, buf) && ! buf.empty() ){
std::istringstream ist(buf);
int cnt(0);
c = 0;
while ( ist >> buf ){
if ( vowels_count(buf) >= NEEDED && ++cnt )
std::cout << buf << std::endl;
++c;
}
std::cout << cnt << " words." << std::endl;
std::cout << "\n\nCount all words = " << c << '\n';
}
return 0;
}
Объяснение кода листинга программы
- В функции
vowels_countмы используем статическую переменнуюVOW, которая содержит все гласные буквы в нижнем регистре. - Затем мы инициализируем переменную
cntдля подсчета гласных букв, аposдля хранения позиции текущей гласной буквы в строкеs. - В цикле
whileмы находим следующую гласную букву в строкеsс помощью методаfind_first_ofи увеличиваем счетчикcntна 1. - Затем мы увеличиваем
posна 1, чтобы пропустить текущую гласную букву при следующем поиске. - В основной функции
mainмы используемstd::getlineдля считывания строки от пользователя и сохраняем ее в переменнойbuf. - Мы создаем объект
istringstreamиз строкиbufдля разбиения ее на слова. - Затем мы инициализируем счетчик
cntдля подсчета слов, удовлетворяющих условию, и переменнуюcдля подсчета общего количества слов. - В цикле
whileмы считываем слова изistи проверяем, содержит ли каждое слово достаточное количество гласных букв с помощью функцииvowels_count. - Если условие выполняется, мы выводим слово на экран и увеличиваем
cntна 1. - Мы также увеличиваем
cна 1 после каждого слова. - После выхода из цикла
whileмы выводим количество слов, удовлетворяющих условию, и общее количество слов. - Затем мы выводим сообщение
Count all wordsи общее количество слов. - В конце программы мы возвращаем 0, чтобы указать, что программа успешно завершилась.