Откуда взялся ненужный символ в выводе и в каком направлении дальше идти?

Решаю задачу: Сформировать строку из слов исходной строки в порядке увеличения количества символов в слове.

Решил для начала найти длину и окончание самого короткого слова. Вот мой код:

#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);
}

Проблемы с выводом две:

  1. Странный символ X перед выводом самого короткого слова.

    Angelica Tanya Evlampia 5, 14 XTanya

  2. Если я меняю порядок слов и самое короткое слово в конце предложения, то выводится не самое короткое слово. И к выведенному добавляется RP.

    Anjelica Evlampia Tanya 8, 8 XAnjelicaRP

Ну и общий вопрос: как двигаться дальше, чтобы решить задачу? Я думаю, что после нахождения самого короткого слова, его нужно добавить в пустой массив, а из первоначального массива его удалить. Но я не представляю пока как это реализовать. Может подкинете идеи как лучше сделать?


Ответы (1 шт):

Автор решения: Harry

Ну вам же в вопросе Можно ли переделать код? подсказали — сортируйте по длине слов...

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 << " ";
}
→ Ссылка