Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ преобразования строк

Автор: 18192123 26.11.2006 20:58

вот такая задачка:
вводится строка: фамилия, имя, отчество; получить строку, содержащую фамилию полностью и начальные буквы инициалов.(из стандартного можно использовать length, ord, char)

вот что, получилось


program hgkf;
uses crt;
function slovo(const s:string; var i:byte):string;
var w:string;
begin
w:='';
while (s[i]<>' ') do
begin
w:=w+s[i];
i:=i+1;
end;
slovo:=w;
end;
function slovo1(const s1:string; var i:byte):string;
var w1:string; begin
w1:='';
while (s1[i]<>' ') and (i<=length(s1)) do
begin
w1:=w1+s1[i];
i:=i+1;
end;
slovo1:=w1;
end;
VAR
s,s1,s2,w,w1:string;
i:byte;
BEgIN
clrscr;
writeln ('vvedite stroky');
readln (s);
w:=slovo(s,i); s1:='';
s1:=s1+(s-w); { здесь я хочу получить строчку, содерж. только имя и отчество, но компилятор не пропускает}
w1:=slovo1(s1,i);
while i<-length(s1) do
begin
w1[0]:=w1[1];
w1:=w1+1;
end;
s2:=w+' '+char(ord(w[0]));
writeln(s2);
readln;
readln;
end.


Автор: klem4 26.11.2006 21:34

!smoke2.gif

Так пойдет ?)

const
n = 3;

P: array [1..n] of String = (
'Иванов Иван Петрович',
'Петров Сергей Сергеевич',
'Сидоров Николай Валентинович'
);

var
i: Integer;

begin

for i := 1 to n do
writeln( Copy(P[i], 1, Pos(' ', P[i])), ' ',
Copy(P[i], Pos(' ', P[i]) + 1, 1), '.', Copy(P[i] ,
Pos(' ', P[i]) + 1 + Pos(' ', Copy(P[i], Pos(' ', P[i]) + 1,255)), 1));
end.

Автор: volvo 26.11.2006 22:00

Цитата
из стандартного можно использовать length, ord, char
blink.gif

Я бы вот так делал:
uses crt;

function slovo(const s: string; var i: byte): string;
var w: string;
begin
w := ''; i := 1;
while s[i] <> ' ' do begin
w := w + s[i];
i := i + 1;
end;
slovo := w;
end;

function letter(const s: string; var i: byte): string;
begin
while s[i] <> ' ' do
i := i + 1;
while s[i] = ' ' do
i := i + 1;

letter := s[i];
end;

var
s, w: string;
i: byte;
begin
clrscr;
writeln('vvedite stroky');
readln(s);

w := slovo(s,i) + ' ';
w := w + letter(s, i) + '.';
w := w + letter(s, i) + '.';
writeln(w);

readln;
end.

Автор: 18192123 26.11.2006 22:46

Цитата(volvo @ 26.11.2006 18:00) *

blink.gif


function letter(const s: string; var i: byte): string;
begin
while s[i] <> ' ' do
i := i + 1;
while s[i] = ' ' do
i := i + 1;

letter := s[i];
end;





объясни, пожалуйста, в чем смысл ф-ции letter и что она делает

Автор: volvo 26.11.2006 22:54

Смысл? Она вытаскивает из строки первый символ после пробела, начиная с той позиции, которая передана в переменной i... При этом, по окончании работы этой функции i содержит позицию возвращенного символа... Таким образом, если мы вызываем эту функцию 2 раза подряд, то она вернет первые буквы двух подряд идущих слов... Что тебе и нужно smile.gif