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

Объяснение кода листинга программы

В этом коде:

  1. Создается строка Str, в которую считывается текст из стандартного ввода.
  2. Инициализируется константная строка Delims, которая содержит разделители (запятая, точка, двоеточие, точка с запятой, вопросительный знак и восклицательный знак, пробел).
  3. Происходит проход по каждому символу строки Str.
  4. Если текущий символ является одним из разделителей, он заменяется на пробел.
  5. Создается объект std::stringstream с именем ist, который инициализируется строкой Str.
  6. В цикле, пока std::stringstream может считывать слова, они считываются и добавляются в вектор Vec.
  7. Выводится количество слов в векторе Vec.
  8. В цикле, каждое слово из вектора Vec выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы