Тема: AHK: Максимальное количество букв в слове
Дан текст. Как найти слово с максимальным количеством букв?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Дан текст. Как найти слово с максимальным количеством букв?
Loop (parse a string)
Loop, Parse, InputVar [, Delimiters, OmitChars]
StringLen
StringLen, OutputVar, InputVar
Но как именно по словам сканировать а не сразу полностью предложение? Не получается.
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
Кстати, может быть несколько слов с максимальным количеством букв?
Благодарю!
if (StrLen(A_LoopField) > MaxLen) { MaxLen := StrLen(A_LoopField) Result := % A_LoopField }
Объясните эти строчки пожалуйста. Вникнуть не могу
Текст делится на слова и в цикле проверятся длина очередного слова. (сравниваем с числом в переменной 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Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться