String63. Дана строка-предложение на русском языке и число $$K (0 < K < 10)$$. Зашифровать строку, выполнив циклическую замену каждой буквы на букву того же регистра, расположенную в алфавите на $$K$$-й позиции после шифруемой буквы (например, для $$K = 2$$ «А» перейдет в «В», «а» — в «в», «Б» — в «Г», «я» — в «б» и т. д.). Букву «ё» в алфавите не учитывать, знаки препинания и пробелы не изменять.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
program String63; var S:String; i,i2,K:integer; begin Write('S: '); Readln(S); Write('K:'); Readln(K); for i2:=1 to K do begin i:=1; while (i<=Length(S)) do begin case ord(S[i]) of 128..158,160..174,224..238: S[i]:=chr(ord(S[i])+1); 159: S[i]:=chr(128); 175: S[i]:=chr(224); 239: S[i]:=chr(160); end; inc(i); end; end; Writeln(S); end. |
Другие задачи из раздела String можно посмотреть здесь.
Наверное лучше засунуть цикл for внутрь while, чтобы за один проход строки; и вместо S[i]:=chr(ord(S[i])+1) процедуру inc(S[i])
s[i] это char он не инкается