1

Тема: AHK: Максимальное количество букв в слове

Дан текст. Как найти слово с максимальным количеством букв?

2

Re: AHK: Максимальное количество букв в слове

Loop (parse a string)
Loop, Parse, InputVar [, Delimiters, OmitChars]


StringLen
StringLen, OutputVar, InputVar

3

Re: AHK: Максимальное количество букв в слове

Но как именно по словам сканировать а не сразу полностью предложение? Не получается.

4

Re: AHK: Максимальное количество букв в слове

MaxLen :=0
Text =
(
Не жалею, не зову, не плачу,
Все пройдет, как с белых яблонь дым.
Увяданья золотом охваченный,
Я не буду больше молодым.
)

Text := RegExReplace(Text, "[^a-zA-Zа-яА-Я\s]")
Loop, Parse, Text, %A_Space%`n
   if (StrLen(A_LoopField) > MaxLen) {
      MaxLen := StrLen(A_LoopField)
      Result := % A_LoopField
   }
MsgBox % "Слово: " . Result . " `; Кол-во знаков - " . MaxLen

5

Re: AHK: Максимальное количество букв в слове

Кстати, может быть несколько слов с максимальным количеством букв?

6

Re: AHK: Максимальное количество букв в слове

Благодарю!

7 (изменено: Qweasd123, 2013-12-25 18:14:28)

Re: AHK: Максимальное количество букв в слове

Irbis пишет:


   if (StrLen(A_LoopField) > MaxLen) 
{
      MaxLen := StrLen(A_LoopField)
      Result := % A_LoopField
   }

Объясните эти строчки пожалуйста. Вникнуть не могу

8 (изменено: Irbis, 2013-12-25 20:14:05)

Re: AHK: Максимальное количество букв в слове

Текст делится на слова и в цикле проверятся длина очередного слова. (сравниваем с числом в переменной MaxLen)
Если она больше, чем у ранее найденного "гиганта", то MaxLen присваивается новое значение, а слово сохраняется в Result.

Upd:
ypppu верно заметил, если это важно, можно предусмотреть ситуацию, когда несколько слов имеют одинаковую длину.

MaxLen := 0
Text =
(
aaa bb cc ddd
zzz
)

Text := RegExReplace(Text, "[^a-zA-Zа-яА-Я\s]")
Loop, Parse, Text, %A_Space%`n
   if ((CurrLen := StrLen(A_LoopField)) = MaxLen) {
      Result .= A_LoopField "`n"
       Continue
   }
   else if (CurrLen > MaxLen) {
      MaxLen := CurrLen
      Result := % A_LoopField "`n"
   }
MsgBox % "Слово (слова):`n" Result "`nКол-во знаков - " MaxLen