код должен возвращать длину самого короткого слова в строке.в переменной min хз откуда взявшиеся значения.как исправить код?

#include<iostream>
#include <string> using namespace std;

int find_short(string str) {
    int cntr = 0;
    int min = int(str.length());
    for (int i = 0;i < int(str.length());++i)
    {
        if (str[i] != ' ')
        {
            ++cntr;
        }
        if (cntr < min)
        {
            min = cntr;
        }
        if (str[i] == ' ')
        {
            cntr = 0;
        }
    }
    return min; }

int main() {`введите сюда код`
    cout << find_short("bitcoin take over the world maybe who knows perhaps") << endl;
    return 0; }

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

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

Пусть у нас будет функция:

bool is_separate_symbol(char symbol)
{
    return symbol == ' ' || symbol == '+' || symbol == '-' || symbol == '*' и т.д;
}

Добавьте в эту функцию все нужные вам разделительные символы.

До цикла надо определить переменную: bool hasSeparate = true;

Что, если заменить тело цикла на:

if(!is_separate_symbol(str.at(i)))
{
    ++cntr;
    hasSeparate = false;
}
else
{
    if(min > cntr && !hasSeparate)
    {
        i++;
        min = cntr; 
    }
    cntr = 0;
    hasSeparate = true;
}

Затем после цикла:

if(!hasSeparate && min > cntr)
{
    min = cntr;
}
→ Ссылка
Автор решения: MBo

Код верно обрабатывает многократные пробелы, первое слово, последнее слово:

int find_short(string str) {
    int cntr = 0;
    int n = str.length();
    int min = n + 1;
    for (int i = 0; i < n + 1; ++i)
    {
        if (i==n || str[i] == ' ')
        {
            if (cntr && cntr < min)
                min = cntr;
            cntr = 0;
        }
        else
            cntr++;
    }
    return min>n?0:min; 
}
→ Ссылка