N
neomax38
Нужно сделать проверку букв: Если строчные то вывести их заглавными в результат строки.
Код:
PROGRAM Lab;
CONST
MaxLen = 7;
TYPE
SetOfChar = Set of Char;
CONST
Delim : SetOfChar = [' '];
Digit : SetOfChar = ['0'..'9'];
Latin : SetOfChar = ['a'..'z', 'A'..'Z'];
VAR
i : Integer;
SStr : String; {строка источник}
DStr : String; {строка-результат}
WStr : String; {строка с текущим выделенным словом}
Sum : Integer; {сумма цифр первого цифрового слова}
IsDigitWord,
IsSummaComplete, {признак завершения подсчёта суммы цифр}
IsLatinWord : BOOLEAN;
BEGIN
write ('vvedite stroku');
readln(SStr);
{инициализация переменных}
DStr:='';
Sum:=0;
IsSummaComplete:=FALSE;
IsDigitWord:=TRUE;
IsLatinWord:=TRUE;
WStr:='';
i:=1;
while Length(SStr)+1>=i do begin
{если встретился разделитель или закончилась обрабатываемая строка:
- для латинских слов формируем результирующую строку
- для цифровых слов устанавливаем признак завершения подсчёта суммы}
if (SStr[i] in Delim) OR (i=Length(SStr)+1)
then begin
if IsLatinWord AND (Length(WStr)<=MaxLen) AND (Length(WStr)>0)
then begin
if Length(DStr)<>0
then DStr:=DStr+' ';
DStr:=DStr+WStr;
end;
IsSummaComplete:=IsSummaComplete OR IsDigitWord;
IsDigitWord:=TRUE;
IsLatinWord:=TRUE;
WStr:='';
{пропускаем все ограничители}
while (Length(SStr)>=i) AND (SStr[i] in Delim) do Inc(i);
if i>Length(SStr) then Break;
end;
{для латинских слов продолжаем выделять само слово}
if SStr[i] in Latin
then WStr:=WStr+SStr[i]
else IsLatinWord:=FALSE;
{для первого цифрового слова подсчитываем сумму цифр}
if (SStr[i] in Digit) AND NOT IsSummaComplete
then begin
Sum:=Sum+(Byte(SStr[i]) - Byte('0'));
end
else begin
IsDigitWord:=FALSE;
if NOT IsSummaComplete
then Sum:=0;
end;
Inc(i);
end;
WriteLn('Source string:');
WriteLn('"', SStr, '"');
WriteLn('Result string:');
WriteLn('"', DStr, '"');
WriteLn('Summa: ', Sum);
END.