Сортировка строк по количеству слов
Задача: Ввести с клавиатуры массив строк. Отсортировать его по возрастанию количества слов в каждой строке.
Получилось реализовать пока только чтение всех строк, дальше совсем не могу ничего придумать, как дальше считать слова и в дальнейшем менять строки местами?
Вот начало кода
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void PrintVector(const vector<string>& v)
{
for (string s : v)
{
cout << s << endl;
}
}
int main ()
{
setlocale(LC_ALL, "Russian");
int n;
cout << "Введите количество строк в массиве:" << endl;
cin >> n;
vector <string> v;
int i = 0;
cout << "Введите сами строки:" << endl;
while (i <= n )
{
string s;
getline (cin, s);
v.push_back(s);
i++;
}
PrintVector(v);
}
Ответы (1 шт):
Автор решения: AR Hovsepyan
→ Ссылка
Как разделять строку на слова, было много вопросов и ответов. Выполняя то же самое, можете просто считать количество слов(тут нужно еще уточнить что есть слово для данной задачи).
auto Pred = [](const std::string& s1, const std::string& s2)
{
/*если разделитель пробел*/
std::istringstream is1(s1), is2(s2);
size_t k1{}, k2{}; //количество слов
std::string t;
while (is1 >> t) ++k1;
while (is2 >> t) ++k2;
return k1 < k2;
};
Дальше просто сортировать по данному предикату. Думаю тут не нужно менять местами строки, где количества слов одинаковы, поэтому использовать :
std::stable_sort(v.begin(), v.end(), Pred);