2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Задача со строками
Сообщение19.06.2009, 18:11 
Помогите пожалуйста решить задачу на Pascal :?: :

Дана строка, где слова разделены одним или несколькими пробелами.Преобразовать каждое слово в строке, удалив из него все последующие вхождения первой буквы(количество пробелов не изменять)

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 18:21 
Код:
i:=1;
while i<=length(s) do begin
  if (i+1<=length(s)) and (s[i+1]=s[i]) and (s[i+1]<>' ')
    then Delete(s, i+1, 1)
    else inc(i);
end;

Ну что-то типа так. Наверное, можно и оптимизировать, но лень.

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 18:30 
Dezmondoff, значит, вы плохо знаете Pascal, раз решения не видно сразу. И, кстати, условие довольно размыто - не ясно, первой буквы чего - каждого слова или первого.

Кстати говоря, Delete - мееедленная процедура. Если позволяет память, лучше использовать вторую строку.

Ещё одна неоднозначность - удалять ли ппппервую букву или пепрпвуюп букву?

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 18:36 
arseniiv в сообщении #223378 писал(а):
Dezmondoff, значит, вы плохо знаете Pascal, раз решения не видно сразу.

Да Pascal знаю плохо!
arseniiv в сообщении #223378 писал(а):
И, кстати, условие довольно размыто - не ясно, первой буквы чего - каждого слова или первого.

Не там в условии написано "каждое слово в строке, удалив из него все последующие вхождения первой буквы

-- Пт июн 19, 2009 19:37:14 --

за помощь спасибо

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 18:47 
О да, я чего-то не вчитался. Если первая буква каждого слова, то маленько сложнее. Примерно так.

Код:
firstsym:=s[1];
i:=2;
while i<=length(s) do begin
  if (s[i-1]=' ') and (s[i]<>' ') {начало слова} then begin
    firstsym:=s[i];    continue;    end;
  if (s[i]=firstsym) and (s[i]<>' ')   then Delete(s, i, 1)   else inc(i);
end;

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 18:56 
Лучше не такой цикл делать, а конечный автомат. Нагляднее и удобнее, ИМХО.

P.S. Когда нет опыта - лучше получать его, а получить его ни чем, кроме своего труда, не получится. Надо написать и проверить, исправить и проверить, и т. д., и всё будет лучше, чем было...

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 18:57 
Спасибо ewert

-- Пт июн 19, 2009 20:17:20 --

firstsym:=s[i]; continue; end;
Единственно, что вот в это месте возникает зацикливание!

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 19:38 
Dezmondoff в сообщении #223385 писал(а):
firstsym:=s[i]; continue; end;
Единственно, что вот в это месте возникает зацикливание!

Вот это уж точно, я уж и сам заметил, надо перед "continue;" вставить "inc(i);".

 
 
 
 Re: Задача со строками
Сообщение19.06.2009, 19:59 
Всё работает спасибо большое!

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group