Строка символов содержит несколько предложений m каждое из которых заканчивается точкой, восклицательным или вопросительным знаком. Определить количество предложений и длину каждого из них в символах.
/*last_sent_end - индекс конца последнего найденного на данный момент предложения. Т.к. отсчет в C++ с 0, то начальное значение -1. Просматривается строка посимвольно. Встречен один из символов - счетчик m увеличивается, длина предложения вычисляется как разность текущего индекса и индекса конца предыдущей строки, и заносится в std::vector<int> arr_of_length. В last_sent_end сохраняется индекс найденного символа - индекс конца последней найденной строки. Случаи некорректного ввода не обработаны.*/
#include <iostream>
#include <vector>
#include <string>
int main()
{
int m = 0, last_sent_end = -1;
std::string str;
std::vector<int> arr_of_length;
std::cout << "Input string: ";
std::getline(std::cin, str);
for (int i = 0; i < static_cast<int>(str.length()); i++)
Answers & Comments
Verified answer
/*last_sent_end - индекс конца последнего найденного на данный момент предложения. Т.к. отсчет в C++ с 0, то начальное значение -1. Просматривается строка посимвольно. Встречен один из символов - счетчик m увеличивается, длина предложения вычисляется как разность текущего индекса и индекса конца предыдущей строки, и заносится в std::vector<int> arr_of_length. В last_sent_end сохраняется индекс найденного символа - индекс конца последней найденной строки. Случаи некорректного ввода не обработаны.*/
#include <iostream>
#include <vector>
#include <string>
int main()
{
int m = 0, last_sent_end = -1;
std::string str;
std::vector<int> arr_of_length;
std::cout << "Input string: ";
std::getline(std::cin, str);
for (int i = 0; i < static_cast<int>(str.length()); i++)
{
const char symb = str[i];
if (symb == '!' || symb == '?' || symb == '.')
{
m++;
arr_of_length.push_back(i - last_sent_end);
last_sent_end = i;
}
}
std::cout << "m = " << m << '\n';
for (int sent_length : arr_of_length)
{
std::cout << sent_length << " ";
}
return 0;
}