Поместить в начало строки слова, содержащие только цифры, а затем все остальные слова
Категория: Delphi/Pascal
2013-04-05 15:29:24
Строка состоит из слов разделенных ровно 1 пробелом, пробелов перед первым и после последнего слова нет. Поместить в начало строки слова, содержащие только цифры, а затем все остальные слова. Порядок слов внутри заданных групп не должен изменяться.
code: #delphi
var s,s1,s2,s3:string;{основная и три вспомогательные строки, так удобнее} i,j,k:integer; begin k:=0; repeat {проверяем правильность ввода строки} write('s: '); readln(s); for i:=1 to length(s) do if (s[1]=' ')or(s[length(s)]=' ')or(pos(' ',s)>0){чтобы не было пробела в начале, конце и 2х пробелов подряд} then k:=1; until k=0; s:=s+' ';s1:='';s2:='';s3:='';{добавляем пробел в конец для удобства, обнуляем строки} while pos(' ',s)>0 do {пока есть пробелы} begin s1:=copy(s,1,pos(' ',s)-1);{смотрим очередное слово} k:=0; for j:=1 to length(s1) do if s1[j] in ['0'..'9'] then k:=k+1;{считаем в слове цифры} if k=length(s1) then s2:=s2+' '+s1 {если все цифры, в первую строку} else s3:=s3+' '+s1; {если нет, во вторую} delete(s,1,pos(' ',s));{удаляем просмотренное слово} end; write(s2+s3); {складываем строки и выводим} readln end.
автор: Puporev
code: #delphi
program words; {$APPTYPE CONSOLE} uses SysUtils; type TStrArr = array of string; function SplitStr(const sSrc,sDelimiter:string; lLimit:integer=-1; bWithEmpty:boolean=true):TStrArr; var i,ni,cnt,dl:integer; begin dl := Length(sDelimiter); SetLength(result,0); if lLimit<=0 then lLimit := MaxInt; cnt := 0; i := 1; repeat inc(cnt); SetLength(result,cnt); ni := PosEx(sDelimiter, sSrc, i); if (ni=i) and not bWithEmpty then begin dec(cnt); SetLength(result,cnt); inc(i,dl); end else if (ni=0)or(cnt=lLimit) then begin result[cnt-1] := Copy(sSrc, i, MaxInt); break; end else begin result[cnt-1] := Copy(sSrc, i, ni-i); i := ni+dl; end; until false; end; function Join(const Arr:TStrArr; const sGlue:string; bSkipEmpty:boolean=false):string; var i,L:Integer; begin result := ''; L := High(Arr); i := 0; while i<=L do begin if not bSkipEmpty or (Arr[i]<>'') then begin if i>0 then Insert(sGlue, result, Length(result)+1); Insert(Arr[i], result, Length(result)+1); end; inc(i); end; end; var s:string; arr,arr2:TStrArr; i,L:Integer; begin write('Input words: '); readln(s); arr := SplitStr(s,' ',-1,false); L := Length(arr); SetLength(arr2,0); for i:=0 to L-1 do begin if StrToInt64Def(arr[i],-1)>=0 then begin SetLength(arr2,Length(arr2)+1); arr2[High(arr2)] := arr[i]; arr[i] := ''; end; end; s := Join(arr2, ' ')+' '+Join(arr, ' ', true); writeln('Result is: ',s); readln; end.
автор: Vovan-VE
Поделиться: