C/C++

C++ решение задач

Дана строка символов которая обязательно заканчивается символом точки . строка состоит из слов которые отделены друг от друга пробелами вывести самое короткое слово и его порядковый номер.( Продемонстрировать на примере) (
#include <iostream>
#include <string>

using namespace std;

int main()
{
char c;
string s,word,minword=""s;
while( (c = getchar()) != '.')
s += c;

int len,minlen=s.length() + 1,pos=1,posmin;
for(int x = 0; x < s.length(); x++)
{
len = 0;
word = ""s;
while(s[x] != ' ' && x < s.length())
{
len++;
word += s[x];
x++;
}
if(len > 0)
{
if(len < minlen)
{
minword = word;
posmin = pos;
minlen = len;
}
pos++;
}
}
if(minword.length())
{
cout << minword << ' ' << posmin << '.' << endl;
}
else
{
cout << "Слово не найдено." << endl;
}
return 0;
}
Виталий Маринохин
Виталий Маринохин
90 500
Лучший ответ
Виталий Маринохин Тут напечаталось первое из коротких слов. Второе уже не напечаталось.
Дмитрий Коляда Всё Путём бро спс Подскажи какими ты книги пользуешься а то у меня возникают проблемы или ты гайдами(в ютубе) пользуешься ?
string str= "сколько нам открытий чудных готовит просвященья дух.A опыт - сын ошибок трудных.И гений породокся вдруг.";
cout << str << endl;

size_t f = 0; size_t s= 0; size_t l= 100; size_t c= 0;

f = str.find_first_of("!-,.;"":");
while (f!=string::npos)
{
str[f]=' ';
f=str.find_first_of("!-,.;"":",f+1);
}
cout << str << endl;
f=0;
s= str.find(' ', f);
while (s!=string::npos)
{
cout << s << ' ';
if ( ((s-f)<l) && ((s-f)!=0) ) { c= f; l= s-f; }
f= s+1;
s= str.find(' ', f);
}
cout << endl << c << ' ' << l << endl;
cout << str.substr(c,l+1) << endl;
Zhargal Gomboev При разбиении на токены (слова) надо сначала проезжать пробелы, табуляции и прочую хрень а потом уже выделять сам токен потому что никто не гарантирует, что строка не начнется с пустого символа. Для этих целей лучше использовать find_first_not_of а потом уже .find_first_of
Андрей Литвинов а что здесь тусовались ребятки из украины знаешь? перекрыли им кислород поди? Теперь вот из харьковского политеха пусть им помогают. У них уровень Бауманки был во времена СССР
Это не ответ на вопрос, а скорее замечание к нему.
Вам дали очень коварное ТЗ, и, к сожалению, ни один из авторов предыдущих ответов не обратил на это внимание. Вчитайтесь еще раз "Дана строка символов". Не БАЙТ а СИМВОЛОВ. И НИЧЕГО не сказано про кодировку, в которой эти символы находятся. Авторы двух предыдущих ответов, да и вы, вероятно, по умолчанию приняли что один символ равен одному байту, а ведь это совсем не обязательно так. И когда вас просят вывести самое короткое слово - то какую длину они имеют ввиду - символы или байты? Например если cтрока "Hello друг." будет в очень распространенной кодировке UTF-8, то самое короткое слово в байтах будет "Hello" а не "друг" потому что длина слова Hello в этой кодировке 5 байт а слова "друг" 8 байт. Такие вещи программист должен сразу просекать и уточнять у заказчика, что именно ему нужно.