|
#1
|
|||
|
|||
Строки
Уважаемые форумчане! Помогите с прогой. до 20.10.09 сдать надо!!!!
Дана строка из нескольких слов, которые отделяются друг от друга пробелами. Вывести слова, задающие в виде строки целые числа (они могут быть и отрицательными). Например, для строки “аbс-9-0w tr567u -- i-o ” должны быть выведены строки “-90”, “567”. |
#2
|
||||
|
||||
Вроде ничего особо сложного.
1. Разбиваем строку на отдельные слова, ориентируясь п пробелу. Тут хорошо поможет функция WrapText(S,' ',#13#10,1) 2. Записываем полученные текст скажем в TStringList. Теперь удобно обращаться к каждому слову как к элементу массива. 3. Теперь надо убрать "не цифры" из каждого слова. Можно воспользоваться функцией ReplaceString, но придется перечислять много буковок для замены, лучше наверное наоборот просто в цикле извлечь цифры. 4. Ну и в финале вывести все полученые таким образом числа. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
А как сделать эту прогу в ConsoleApplication. Я попытался, но прога лагает. Например: я ввожу '56---36 --0056' а она выводит '56-36, -0056' , а надо чтоб выводила '5636, -56'
Код:
var s,e:string; i:integer; begin readln(s); i:=1; while i<=length(s) do begin if s[i] in ['-','0'..'9',' '] then e:=e+s[i]; i:=i+1; end; s:=''; for i:=1 to length(e) do begin if e[i] in ['-'] then begin if i>1 then if (e[i+1] in ['0'..'9']) and (e[i-1] in [' ','-']) then s:=s+e[i]; if i<=1 then if e[i+1] in ['0'..'9'] then s:=s+e[i]; end; if e[i] in ['0'..'9'] then if e[i+1] in [' '] then s:=s+e[i]+', ' else s:=s+e[i]; end; writeln; writeln(s,'.'); readln; end. |
#4
|
||||
|
||||
С чего это вдруг '5636, -56' ?
Как раз '56-36, -0056' - это правильно согласно изначальной постановке вопроса. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Буду надеяться, что правильно. Главное не правильность, главное сдать=))
|
#6
|
|||
|
|||
А все-таки, ради интереса как сделать, чтобы она выводила '5636, -56' , я пробовал, толи я туплю, толи delphi глючит...
|