Нужно преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова, изменив порядок следования цифр в слове на обратный.
Слова разделены пробелами. Работать только с length, ord, chr. Предполагается, что в слове встречаются и символы и цифры. Отсюда вопрос - а как отличить цифры от символов в слове?
volvo
8.01.2007 15:28
Цитата
а как отличить цифры от символов в слове?
SL := slovo(s, i); for j := 1 to length(SL) do if SL[j] in ['0' .. '9'] then { цифра } else { буква }
18192123
8.01.2007 16:31
И снова я что-то упустила....
uses crt;
function Slovo(s:string;n:integer):string; const lim =[' ',',','!']; var ss:string; k,c,i:integer; begin ss:=''; c:=1; k:=1; while k<=length(s) do begin while not(s[k] in lim) and (k<=length(s)) do begin if c=n then ss:=ss+s[k]; inc (k); end; inc ( c ); while (s[k] in lim) and (k<=length(s)) do inc (k); end; Slovo:=ss; end;
var s, sl : string; i, j, pos : integer;
begin clrscr; writeln (' vvedite stroky, sostoayschyu iz 4isel i simvolov' ); readln (s); pos := 1; while slovo (s, i ) <> '' do begin sl := slovo (s, i); for j := 1 to length (sl) do if sl[j] in ['0'..'9'] then begin sl[pos] := sl[j]; inc (pos); end; end; writeln (' rezyltat: '); writeln (s); readkey; end.
Предположим, что теперь у меня всё цифры в начале слова, но за ними ещё буквы, как тогда записать цифры в обратном порядке?
volvo
8.01.2007 16:51
i := 1; new_s := ''; { <--- Здесь будет храниться результат } while slovo (s, i ) <> '' do begin sl := slovo (s, i); { <--- Берем очередное слово } new_sl := ''; { <--- Это - для преобразованного слова }
{ Сначала проходим по всем цифрам от конца слова к началу } for j := length(sl) downto 1 do if sl[j] in ['0'..'9'] then new_sl := new_sl + sl[j];
{ А теперь - по всем буквам, от начала к концу } for j := 1 to length(sl) do if not(sl[j] in ['0'..'9']) then new_sl := new_sl + sl[j];
{ Добавляем преобразованное слово к строке - результату } new_s := new_s + new_sl + ' ';
inc(i); { <--- и переходим к следующему слову } end;