Разбить строку пополам - Turbo Pascal
Формулировка задачи:
Доброго времени суток друзья. Задался вопросом. Как разделить строку пополам. Например. Дана строка: anfdk_rlkfls_jfkjfl_lkjlkh_erjlkjl, как её разделить на две строки?Вот так:
B = anfdk_rlkfls_jfkjfl_
C = lkjlkh_erjlkjl
Символ "_" является пробелом.
Притом, количество слов, могло быть и не чётным. Подскажите простенький метод.
Решение задачи: «Разбить строку пополам»
textual
Листинг программы
Var
A,B : String;
i,j : Byte;
Begin
Writeln('Введите строку из слов, разделенных пробелами');
{ Readln(S); } {}A:='anfdk rlkfls jfkjfl lkjlkh erjlkjl';{}
A:=A+' ';
i:=1;
j:=Length(A);
While i<j do
Begin
While (A[i]<>' ') do Inc(i);
While (A[j]<>' ') and (j>i) do Dec(j);
While (A[i]=' ') and (i<j) do Inc(i);
While (A[j]=' ') and (j>i) do Dec(j);
end;
B:=Copy(A,i,Length(A)-i+1);
A:=Copy(A,1,i);
Writeln('A = ',A);
Writeln('B = ',B);
end.
Объяснение кода листинга программы
- В начале объявляются переменные A и B типа String, а также переменные i и j типа Byte.
- Выводится сообщение для ввода строки из слов, разделенных пробелами.
- В переменную A записывается введенная строка.
- Переменная A увеличивается на единицу, чтобы включить пробел в начало строки.
- Переменная i устанавливается равной 1, а переменная j - длине строки A.
- Запускается цикл While, который выполняется до тех пор, пока переменная i меньше переменной j.
- Внутри цикла While происходит проверка каждого символа в строке A. Если символ не является пробелом, то переменная i увеличивается на единицу. Если символ является пробелом и переменная j больше переменной i, то переменная j уменьшается на единицу. Если символ является пробелом и переменная i меньше переменной j, то переменная i увеличивается на единицу.
- После завершения внутреннего цикла While переменная i становится равной j.
- Копируется подстрока A от позиции i до позиции j в переменную B.
- Строка A изменяется так, чтобы первый символ был пробелом, и ее длина уменьшалась на единицу.
- Выводится сообщение с значениями переменных A и B.