Самое длинное слово в строке

Задача

Вводится строка слов, разделенных пробелами. Найти самое длинное слово и вывести его на экран. Случай, когда самых длинных слов может быть несколько, не обрабатывать.

Пояснение к задаче и алгоритм решения

Следует ввести счетчик букв в слове. В цикле по символам строки пока очередной символ не пробел, счетчик увеличивается. Как только встречается пробел, следует сравнить значение счетчика со значением, записанным в переменной для хранения размера самого длинного слова. Если слово, которое сейчас было "измерено", длиннее, то записать его длину в эту переменную. Кроме того, надо запомнить индекс начала этого слова. Он определяется вычитанием длины слова из текущего индекса.

После того, как очередное слово было обработано, надо сбросить счетчик букв на 0.

Поскольку последнее слово может не оканчиваться пробелом, то оно будет не учтено. Поэтому после цикла надо проверить текущее значение счетчика букв.

Поскольку нам известны начало самого длинного слова в строке и его длина, то надо вывести на экран часть строки от первой буквы на длину слова. В каждом языке программирования это может быть реализовано по-разному.

Исходный код на языке программирования Pascal

var    
        s: string;
        i, id, len, max, count: byte;
 
begin
        readln(s);
        len := length(s);
        max := 0; // длина самого длинного слова
        id := 0; // индекс начала самого длинного слова
        count := 0;
        for i:=1 to len do
                if s[i] <> ' ' then
                        count := count + 1
                else begin
                        if count > max then begin
                                max := count;
                                id := i - count;
                        end;
                        count := 0
                end;
 
        if count > max then begin // проверка последнего слова
                max := count;
                id := len - count + 1;
        end;                   
 
        writeln(copy(s,id,max));
end.

Пример(ы) выполнения программы на языке Pascal

one two three four five six seven
three

Исходный код на языке программирования C

#include <stdio.h>
#include <string.h>
main() {
    char s[100];
    int i, id, max, count, len;
    gets(s);
    len = strlen(s);
    max = 0;
    id = 0;
    count = 0;
    for (i=0; i<len; i++)
        if (s[i] != ' ') count += 1;
        else {
            if (count > max) {
                max = count;
                id = i - count;
            }
            count = 0;
        }
 
    if (count > max) {
        max = count;
        id = i - count;
    }
    max += id;
    for (i=id; i<max; i++)
        putchar(s[i]);
    printf("\n");
}

Исходный код на языке программирования Python

s = input()
l = len(s)
m = 0
ind = 0
count = 0
for i in range(l):
    if s[i] != ' ':
        count += 1
    else:
        if count > m:
            m = count
            ind = i - count
        count = 0
 
if count > m:
    m = count
    ind = i - count + 1
 
print(s[ind:ind+m])

Исходный код на языке программирования КуМир

алг самое длиное слово
нач
  лит s
  цел i,id,len,mx,count
  ввод s
  len := длин(s)
  mx := 0
  id := 0
  count := 0
  нц для i от 1 до len
    если s[i] <> " " то
      count := count + 1
     иначе
      если count > mx то
        mx := count
        id := i - count
      все
      count := 0
    все
  кц
  если count > mx то
    mx := count
    id := len - count
  все
  вывод s[id:id+mx]
кон

Исходный код на языке программирования Basic

input s$
l = length(s$)
m = 0
id = 0
c = 0
for i=1 to l
        b$ = mid(s$,i,1)
        if b$ <> " " then
                c = c + 1
        else
                if c > m then
                        m = c
                        id = i -c
                endif
                c = 0
        endif
next i
 
if c > m then
        m = c
        id = i-c
endif
 
print mid(s$,id,m)

Тема

Строки

Уровень сложности

Сложный

Дата публикации

Комментарий

Боюсь в каждом из этих решений случаи когда самых длинных слов несколько, все равно выводится первое самое длинное слово в строке, что не соответствует условию задачи (не обрабатывать случаи, когда длинных слов несколько)

s=input()
s=s.strip()
st=[]
for i in range(len(s)):
    n=s.find(" ")
    if n==-1:
        st.append(s)
        break
    st.append(s[:n])
    s=s[n+1:]
    s=s.lstrip()
at=[]
max_l=0
for i in range(len(st)):
    if len(st[i])>max_l:
        at=[]
        at.append(st[i])
        max_l=len(st[i])
    elif len(st[i])==max_l:
        at.append(st[i])
if len(at)>1:
    print('ошибка: в предложении есть несколько слов максимальной длины')
else:
    print(str(at[0]))