![]() |
|
|
#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 глючит...
|