Как переделать программу на C++ для сортировки слов по типу символов
Программа, которая работает, но не устраивает преподавателя, требует переделки. Суть программы заключается в том, что дан текст, состоящий из слов, состоящих из букв и цифр, и необходимо переписать её таким образом, чтобы сначала шли слова, содержащие только цифры, затем слова, содержащие буквы и цифры, и в конце - слова, содержащие только буквы.
Для этого необходимо изменить следующие строки кода или объяснить их работу:
auto text =[](string &str, vector<string> const &words) {
bool first = true;
if (!str.empty()) //плюс минус
first = false;
for (auto const &b : words) {
if (!first)
str += ' ';
else
first = false;
str += b;
}
};
Программа:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int main() {
string input;
cout << "Enter line: ";
getline(cin, input);
if (input.length() > 300)
input.resize(300);
vector<string> wordsOnlyDigits, wordsContainDigits, otherWords;
stringstream stroka(input);
string word;
while (stroka >> word) {
bool containsDigits = false, containsNonDigits = false;
for (auto const &a : word) {
if (isdigit(a))
containsDigits = true;
else
containsNonDigits = true;
}
if (containsNonDigits) {
if (containsDigits)
wordsContainDigits.push_back(word);
else
otherWords.push_back(word);
}
else
wordsOnlyDigits.push_back(word);
}
auto text =[](string &str, vector<string> const &words) {
bool first = true;
if (!str.empty())
first = false;
for (auto const &b : words) {
if (!first)
str += ' ';
else
first = false;
str += b;
}
};
string output;
text(output, wordsOnlyDigits);
text(output, wordsContainDigits);
text(output, otherWords);
output += ' ';
cout << "Output:" << output << endl;
system("pause");
}
После внесения изменений программа будет работать так, как требуется преподавателю, сортируя слова в тексте по типу символов.