Строки в паскале

  • Автор темы neomax38
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

neomax38

#1
Нужно сделать проверку букв: Если строчные то вывести их заглавными в результат строки.

Код:
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.
 
Статус
Закрыто для дальнейших ответов.