Составить функцию для разделения текста - C (СИ)
Формулировка задачи:
Составить функцию для разделения текста, заданного строкой литер, на отдельные слова и подсчета числа слов. Под словом понимается последовательность литер, отличных от пробела, ограниченная слева началом строки или пробелом и справа - пробелом, знаком препинания или концом строки.
Помогите исправить код
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <conio.h> #include <string.h> void main() { int n, i, len; char st[81]; printf(" Vvedite podopitnoe predlogenie "); gets(st); std::cout << "\n"<<"\n"; if (st[0] != ' ') n = 1; else n = 0; len = strlen(st); std:: cout << "slova predloginia :" <<"\n"<<"\n"<<"\n"; for(i=0; i<=len; i++) if(st[i] == ' ' && st[i+1] != ' ') { std:: cout << "\n"; n++; } else std::cout <<n ; std::cout << "\n"<<"\n"; getch(); }
Решение задачи: «Составить функцию для разделения текста»
textual
Листинг программы
#include <iostream> #include <string> #include <sstream> #include <vector> int main() { std::string Str; std::getline(std::cin, Str); const std::string Delims=",.:;?! "; for(std::string::iterator It=Str.begin(); It!=Str.end(); ++It) { if(Delims.find(*It)!=std::string::npos) *It=' '; } std::stringstream ist(Str); std::string Tmp; std::vector<std::string> Vec; while(ist>>Tmp) Vec.push_back(Tmp); std::cout<<"Numb of words: "<< Vec.size() <<'\n'; std::cout<<"Words\n"; for(std::vector<std::string>::const_iterator It=Vec.begin(); It!=Vec.end(); ++It) { std::cout<<*It<<'\n'; } return 0; }
Объяснение кода листинга программы
В этом коде:
- Создается строка
Str
, в которую считывается текст из стандартного ввода. - Инициализируется константная строка
Delims
, которая содержит разделители (запятая, точка, двоеточие, точка с запятой, вопросительный знак и восклицательный знак, пробел). - Происходит проход по каждому символу строки
Str
. - Если текущий символ является одним из разделителей, он заменяется на пробел.
- Создается объект
std::stringstream
с именемist
, который инициализируется строкойStr
. - В цикле, пока
std::stringstream
может считывать слова, они считываются и добавляются в векторVec
. - Выводится количество слов в векторе
Vec
. - В цикле, каждое слово из вектора
Vec
выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д