Откуда взялся ненужный символ в выводе и в каком направлении дальше идти?
Решаю задачу: Сформировать строку из слов исходной строки в порядке увеличения количества символов в слове.
Решил для начала найти длину и окончание самого короткого слова. Вот мой код:
#include<iostream>
#include<string>
using namespace std;
int main() {
char slovo[20], text[120];
int i, min = 100, n, k = 0;
gets(text);
for(i = 0; i < strlen(text); i++) {
if (text[i] != ' ') {
k = k + 1;
}
else {
if (k < min) {
min = k;
n = i;
}
k = 0;
}
}
cout << min << ", " << n;
cout << "\n";
k = 0;
for(i = n - min; i < n; i++) {
slovo[k = k + 1] = text[i];
}
printf("%s", slovo);
}
Проблемы с выводом две:
Странный символ
X
перед выводом самого короткого слова.Angelica Tanya Evlampia 5, 14 XTanya
Если я меняю порядок слов и самое короткое слово в конце предложения, то выводится не самое короткое слово. И к выведенному добавляется
RP
.Anjelica Evlampia Tanya 8, 8 XAnjelicaRP
Ну и общий вопрос: как двигаться дальше, чтобы решить задачу? Я думаю, что после нахождения самого короткого слова, его нужно добавить в пустой массив, а из первоначального массива его удалить. Но я не представляю пока как это реализовать. Может подкинете идеи как лучше сделать?
Ответы (1 шт):
Ну вам же в вопросе Можно ли переделать код? подсказали — сортируйте по длине слов...
using namespace std;
int main()
{
const string str = "Eniki beniki eli vareniki";
vector<string> result;
istringstream ist(str);
for(string word; ist >> word; result.push_back(word));
sort(result.begin(), result.end(),
[](const string &a, const string& b)
{
return a.size() < b.size();
}
);
for(string word: result) cout << word << " ";
}