Составить функцию для разделения текста - 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выводится на экран.