код должен возвращать длину самого короткого слова в строке.в переменной 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;
}