Untitled
unknown
c_cpp
2 years ago
2.1 kB
6
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...