Во всех словах заменить первую букву на последнюю, а последнюю на первую. Как считывать каждое слово? - Turbo Pascal
Формулировка задачи:
Ребята, написал программу, выполняла свое предназначение, но меня преподаватель попросил записать в строку 2 слова, и программа считывает первую букву первого и последнюю второго, таким образом меняются символы в конце и начала строки, как считывать каждое слово и менять в нем первые и последние буквы местами, вот моя программа, она работает корректно только с одним словом в строке.
Листинг программы
- Program Files;
- Uses crt;
- Procedure Input(Var S: string; Var f1: text);
- Var i:shortint;
- n:integer;
- M:string;
- begin
- Write('Enter the file name: ');
- Readln(M);
- Assign(f1, M);
- {$I-}
- Rewrite(f1);
- {$I+}
- if ioresult <> 0 then
- WriteLn('File not found')
- else
- begin
- WriteLn('Found file');
- Rewrite(f1);
- Write('Enter number the strings (0<Strings<=10): ');
- Readln(n);
- Repeat
- if (n>10) or (n<1) then
- begin
- write('Incorrect, retype please: ');
- readln(n);
- end;
- Until (n>=1) and (n<=10);
- for i:=1 to n do
- begin
- Write('Enter string #[',i,']: ');
- readln(s);
- writeln(f1,s);
- end;
- close(f1);
- writeln;
- end;
- end;
- Procedure ReplaceLetters(Var s:string; Var f1,f2: text);
- Var i:shortint;
- c:char;
- begin
- Reset(f1);
- Assign(f2, 'file2.txt');
- Rewrite(f2);
- writeln('File1: ');
- while not eof(f1) do
- begin
- readln(f1,s);
- writeln(s);
- c:=s[1];
- s[1]:=s[Length(s)];
- s[Length(s)]:=c;
- writeln(f2,s);
- end;
- Close(f1);
- Close(f2);
- end;
- Procedure Output(Var S: string; Var f2: text);
- begin
- Writeln;
- Writeln('File2: ');
- Reset(f2);
- While not eof(f2) do
- begin
- begin
- readln(f2,s);
- Writeln(s);
- end;
- end;
- end;
- Var File1,File2: text;
- Lines: string;
- Begin
- clrscr;
- writeln('Program to replace the first and last letters in words to each other');
- Input(Lines,File1);
- ReplaceLetters(Lines,File1,File2);
- Output(Lines,File2);
- write('The program is completed, press any key to exit . . .');
- readkey;
- End.
Решение задачи: «Во всех словах заменить первую букву на последнюю, а последнюю на первую. Как считывать каждое слово?»
textual
Листинг программы
- program ReverseFirstAndLastCharsInWord;
- type
- TSetOfChar = set of char;
- const
- Delimiters: TSetOfChar = [' ', ',', '.'];
- function GetNextWordIndexes(const s: string;
- var StartIndex, FinishIndex: integer): boolean;
- begin
- if (StartIndex < 1) then
- begin
- StartIndex := Length(s) + 1;
- FinishIndex := Length(s) + 1;
- GetNextWordIndexes := False;
- exit;
- end;
- while StartIndex <= Length(s) do
- if not (s[StartIndex] in Delimiters) then
- break
- else
- Inc(StartIndex);
- if StartIndex > Length(s) then
- begin
- StartIndex := Length(s) + 1;
- FinishIndex := Length(s) + 1;
- GetNextWordIndexes := False;
- exit;
- end;
- FinishIndex := StartIndex;
- while FinishIndex <= Length(s) do
- if (s[FinishIndex] in Delimiters) then
- break
- else
- Inc(FinishIndex);
- Dec(FinishIndex);
- GetNextWordIndexes := True;
- end;
- var
- s: string;
- IndxStart, IndxFinish: integer;
- TempChar: char;
- begin
- s := 'qwe ,rrr jfjf 123 -54 ';
- writeln(s);
- IndxStart := 1;
- while GetNextWordIndexes(s, IndxStart, IndxFinish) do
- begin
- TempChar := s[IndxStart];
- s[IndxStart] := s[IndxFinish];
- s[IndxFinish] := TempChar;
- IndxStart := IndxFinish + 1;
- end;
- writeln(s);
- end.
Объяснение кода листинга программы
Этот код написан на Turbo Pascal и решает задачу, которая заключается в том, чтобы заменить первую букву каждого слова на последнюю, а последнюю букву на первую. Вот как он работает:
- Создается тип
TSetOfChar
, который представляет собой множество символов. В данном случае, это просто набор пробелов, запятых и точек. - Функция
GetNextWordIndexes
считывает следующее слово в строке. Она принимает строкуs
, начальный индексStartIndex
и конечный индексFinishIndex
в качестве параметров. ЕслиStartIndex
меньше 1, то функция устанавливаетStartIndex
равным длине строкиs
плюс 1 и возвращаетFalse
. Затем она проверяет каждый символ в строке отStartIndex
доFinishIndex
, и если символ не является пробелом, запятой или точкой, то она увеличиваетStartIndex
и возвращаетTrue
. ЕслиStartIndex
большеFinishIndex
, то функция устанавливаетStartIndex
иFinishIndex
равнымиLength(s)
плюс 1 и возвращаетFalse
. - Переменные
s
,IndxStart
иIndxFinish
инициализируются перед первым вызовом функцииGetNextWordIndexes
. - В цикле, функция
GetNextWordIndexes
считывает следующее слово, затем меняет местами первую и последнюю буквы этого слова, сохраняя результат в переменнойTempChar
. Затем она устанавливаетIndxStart
равнымIndxFinish
плюс 1. - После завершения цикла, вывод
s
будет содержать все слова, в которых первая буква была заменена на последнюю, а последняя буква на первую.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д