Помогите со строками в паскале

  • Автор темы neomax38
  • Дата начала
N

neomax38

#1
Сформировать новую строку из слов, состоящих только из латинских букв, и длиной не более 7 литер. Все строчные буквы в новой строке заменить на заглавные. Найти первое цифровое слово и найти сумму его цифр.


Помогите доделать:sorry: сумму цифрового слова:facepalm: или если можно чуть чуть уменьшить:)

Код:
Program Stroki;
Uses CRT;
Const
Mn_b:Set of char = ['a'..'z'];
Mn_b1:Set of char = ['A'..'Z'];
Mn_cifr:Set of char = ['0'..'9'];
Var
Mas:array[1..20] of String;
Stroka,Nov_stroka1,Nov_stroka2,Nov_Stroka3,Buf_Str:String;
i,j,k,Dlina,Kol,Kol1:Byte;
Flag1,Flag2:Boolean;
Begin
ClrScr;
Write('Введите строку: ');
Readln(Stroka);
Writeln;
j:=1;
Kol:=1;
i:=1;
While i <= Length(Stroka) do
Begin
If Stroka[i] <> ' ' then
Begin
Mas[j]:=Mas[j]+Stroka[i]
End
Else
If Stroka[i] = ' ' then
Begin
Inc(j);
Inc(Kol)
End;
Inc(i)
End;
Nov_Stroka1:='';
I:=1;
While i <= Kol do
Begin
Buf_Str:=Mas[i];
Dlina:=Length(Buf_str);
If Dlina <= 7 then
Begin
Flag1:=True;
For j:=1 to Dlina do
If Not (Buf_Str[j] in Mn_b) or (Buf_str[j] in Mn_b1) then
Begin
Flag1:=False;
Break
End;
If Flag1=true then
Begin
Nov_stroka1:=Nov_stroka1+' '+Buf_str;
End;
End;
Inc(i);
End;
For k:=1 to Length(Nov_stroka1) do
Begin
Nov_stroka1[k]:=UpCase(Nov_stroka1[k]);
End;
Write('Новая строка: ',Nov_Stroka1);
Writeln;
Nov_stroka2:='';
i:=1;
Kol1:=0;
While i <= Kol do
Begin
Buf_Str:=Mas[i];
Flag2:=True;
For j:=1 to Length(Buf_str) do
Begin
If Not (Buf_str[j] In Mn_cifr) then
Begin
Flag2:=False;
Break
End;
End;
If Flag2=True then
Begin
Inc(Kol1);
Break
End;
Inc(I)
End;
Nov_stroka2:=Buf_Str;
If Kol1 > 0 then
Writeln('Первое цифровое слово: ',Nov_Stroka2,'	Сумма =',Nov_Stroka3)
Else
Writeln('В строке нет цифрового слова ');
Readln
End.
Попробовал без массива, но видимо без массива никак:
Код:
Program lab6_string;
uses
crt;
const
rzd=[' ',','];	{возможные разделители слов}
cfr:Set of char = ['0'..'9'];
var
s,s1:string;
i,k,j,l,u:byte;
t,x:integer;
f:boolean;
sum:longint;
code:word;
word:array[1..127] of string;
begin
clrscr;
write('Введите строку: ');
readln(s);
i:=1;
while i<=length(s) do
if not(s[i] in rzd) then{если не разделитель}
begin
k:=0;{начинаем считать буквы}
j:=i;
l:=i;
x:=0;
while not(s[j] in rzd) and (j<=length(s)) do {пока не разделитель и не конец строки}
begin
k:=k+1;{считаем буквы}
j:=j+1;{передвигаемся на следующий символ}
end;
begin
while not(s[l] in rzd) and (l<=length(s)) do begin {пока не дойдем до следующего пробела будем}
if (s[l] in cfr) then begin	{есть цифры}
x:=x+s[l];
L:=l+1;
end		{конец + условия}
else begin				 {если нет смотрим следующий символ}
L:=l+1;
end;  {конец - условия}
end;  {конец условия если 4символьное слово}



end;
i:=i+1
end
else i:=i+1;{если разделитель, пропускаем}
writeln(s);
readln;

Сумма цифр во всей строке
Код:
program primer_lab4;
var
s:string;
i,k,u:byte;
t:integer;
f:boolean;
sum:longint;
code:word;
word:array[1..127] of string;
begin
write('vvedite stroku');
readln(s);
{удалим лишние пробелы}
while s[1]=' ' do delete (s,1,1){в начале};
s:=s+' ';
sum:=0;
u:=0;
repeat
i:=pos(' ',s);
if i>0 then delete(s,i,1);
until i=0;
repeat
i:=pos(' ',s);
if i>0 then
begin inc(k);
word[k]:= copy(s,1,i-1);
delete (s,1,i);
end;
until s='';
for i:=1 to k do
begin
val(word[i],t,code);
if code=0 then begin sum:=sum+t;
f:=true; end;
end;
if f then write('sum',sum)
else write('cfr net');
readln;
end.
 

hosm

* so what *
18.05.2009
2 442
6
#2
If Stroka <> ' ' then Begin Mas[j]:=Mas[j]+Stroka End Else If Stroka = ' ' then Begin Inc(j); Inc(Kol) End;

в Else можно не писать условие if Stroka = ' ' then , ибо если условие If Stroka <> ' ' не выполняется, то Stroka = ' '

Был прикольный пример перевода цифр с учетом того, что они идут подряд в таблице символов:
Ord(Nov_stroka2[j])-Ord('0')