Ну почти. Ещё пару оплошностей.
- В первом цикле лишнюю итерацию делаешь.
- Обнуление
cur_len зачем из цикла вынес? Его только за пределы внутреннего
if нужно было вынести. Ещё раз проштудируй алгоритм.
- В цикле вывода пытаешься выводить каждый раз всю строку, а нам нужно посимвольно выводить, иначе часть строки не получится вывести.
- Ты цикл вывода переделал с
for на
while, но забыл присвоить
i инициализирующее значение, хотя когда у тебя через
for было сделано, то инициализация была.
- В цикле вывода забыты фигурные скобки, в результате в цикле выполняется только
printf, а инкрементация
i уже к циклу не относится. Следует ли говорить, что такой цикл просто зависнет?
В общем, решил я запустить твою программу, и исправив твои ошибки, нашёл ещё два места, о которых я сам не подумал. Вот они:
1. В алгоритме неправильно запоминалось начало максимальной строки. Ведь если мы просто текущий индекс запомним в
start_max, то
start_max будет указывать на пробел в конце слова. А нам ведь нужно запомнить индекс начала слова. Так что я поправил алгоритм вот такими словами:
Romeo писал(а):то отнимаем от текущего индекса cur_len и запоминаем получившуюся разность в в переменной start_max
2. Ещё одна мелочь - чисто техническая. Если мы будем считывать строку через
scanf, то прочитается строка до первого пробела - такая особенность этой функции. Для того, чтобы прочитать всю строку целиком до перевода каретки, следует вызывать функцию
gets.
Ты проделал большую работу и не сдался. Ты заслужил это. Лови исправленную программу. Она сделана под Visual Studio, так что у неё несколько иная сигнатура мэйна, но в остальном всё один в один, так что ты разберёшься.
Код: Выделить всё
#include <stdio.h>
#include <string.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
char s[255]]==0) || (s[i]==' '))
{
if ((cur_len >= 3) && (cur_len > max_len))
{
start_max = i - cur_len;
max_len = cur_len;
}
cur_len = 0;
}
else
{
cur_len++;
}
}
if (start_max >= 0)
{
i = start_max;
while ((s[i] != ' ') && (s[i] != 0))
{
printf("%c", s[i]);
++i;
}
}
else
{
printf("slovo dlinnoy ot trex simvolov i boliche, ne bilo naydeno");
}
getch();
return 0;
}