Untitled
unknown
c_cpp
3 years ago
2.1 kB
7
Indexable
#include <string>
#include <iostream>
#include <vector>
using namespace std;
string words = "Студенты, если у вас возникают вопросы, то можете смело задавать их прямо здесь";
vector <string> words_arr;
int find_last_word_len(string words)
{
int a = words.rfind(" ");
int b = words.rfind(", ") + 1;
return (words.substr(1 + max(a, b))).size();
}
int word_end_index(string words, int start)
{
int a = words.find(" ", start) - 1;
int b = words.find(",", start) - 1;
if (a < 0 && b < 0)
return words.size() - 1;
else if (a < 0)
return b;
else if (b < 0)
return a;
else
return min(a, b);
}
void reverse_word(string& words, int word_start, int word_end)
{
for (int i = 0; i < (word_end - word_start + 1) / 2; i++)
{
char c = words[word_start + i];
words[word_start + i] = words[word_end - i];
words[word_end - i] = c;
}
}
int main()
{
setlocale(LC_ALL, "Rus");
int last_word_len = find_last_word_len(words);
cout << "Исходная строка: \n" << words << endl;
for (int word_start = 0; word_start < words.size(); word_start++)
{
if (words[word_start] == ' ' || words[word_start] == ',')
continue;
int word_end = word_end_index(words, word_start);
int word_len = word_end - word_start + 1;
if (word_len > last_word_len)
{
reverse_word(words, word_start, word_end);
}
else if (word_len < last_word_len)
{
words_arr.push_back(words.substr(word_start, word_len));
}
// cout << words.substr(word_start, word_len) << endl;
word_start = word_end;
}
for (string word : words_arr)
{
int start = words.find(word);
words.erase(start, word.size());
}
cout << "\nИзменённая строка: " << words;
cout << "\nСлова, которые короче последнего слова: \n";
for (string every_word : words_arr)
{
cout << every_word << endl;
}
}
Editor is loading...