Как вывести на экран все слова из исходной строки, в которых символ, указанный пользователем, встречается не менее указанного количества раз?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string> getWordsWithSymbol(const string& str, char symbol, int count) {
vector<string> words;
string word;
int symbolCount = 0;
for (char c : str) {
if (c != ' ') {
word += c;
if (c == symbol) {
symbolCount++;
}
} else {
if (symbolCount >= count) {
words.push_back(word);
}
word = "";
symbolCount = 0;
}
}
if (symbolCount >= count) {
words.push_back(word);
}
return words;
}
int main() {
string sentence;
char symbol;
int count;
cout << "Введите предложение: ";
getline(cin, sentence);
cout << "Введите символ: ";
cin >> symbol;
cout << "Введите минимальное количество повторений символа: ";
cin >> count;
vector<string> wordsWithSymbol = getWordsWithSymbol(sentence, symbol, count);
cout << "Слова, в которых символ '" << symbol << "' встречается не менее " << count << " раз:\n";
for (const string& word : wordsWithSymbol) {
cout << word << endl;
}
return 0;
}
Если ваш код успешно компилируется в C++, то вам не о чем беспокоиться. Если ваш преподаватель настаивает на дальнейшей переписке кода, возможно, стоит уточнить, до какой степени он хочет, чтобы вы это делали. Первая идея для улучшения кода - заменить ASCIIZ строки на использование класса std::string. Попробуйте переписать весь код включая следующую функцию: void output_res(char* mas_str, int* arr, char character, int occurrences) на void output_res(std::string mas_str, int* arr, char character, int occurrences) Также замените функции strtok, strlen и printf на соответствующие методы класса std::string или оператор << класса std::cout. Это будет первым шагом для улучшения кода и сделает его более понятным и читаемым. Если ваш преподаватель все еще не удовлетворен, вернитесь сюда, и мы поможем вам дальше - например, с использованием лямбда-функций и других новых возможностей C++11 и выше.