Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2008, 23:12   #1
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию поогите исправить программу со стрингами

Program Laba4;
{Їа®Ја*¬¬* ђ®¬**®ў* Ђ*в®**}
var
Tekst,TekstN:string;
Pozicia,Zad,Per:integer;
Symbol:char;
begin
write('введите ваше предложение');
readln(Tekst);
write('введите букву слова начинающиеся с которой будем удалять ');
readln(symbol);
Tekst:=concat(' ',Tekst,' ');
TekstN:=Tekst;
Pozicia:=pos(symbol,tekst);
While Pozicia<>0 do
begin
zad:=Pozicia;
while tekst[zad] <>' ' do
dec(zad);
per:=Pozicia;
While Tekst[per]<>' 'do
inc(per);
delete(tekst,zad,per-zad);
pozicia:=pos(symbol,tekst);
end;
writeln('предложение',TekstN ,' без слов начинающихся с ',symbol,' - ',Tekst);
Readln;
End.


эта программа удаляет из текста все слова содержащие букву которую мы задаем, а мне нужно что бы она удаляля только слова начинающиеся с заданной буквы
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 30.12.2008, 23:31   #2
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Должно помочь:
Код:
While ((Pozicia<>0)and(Tekst[Pozicia - 1]= ' ')) do
Gorychev вне форума Ответить с цитированием
Старый 30.12.2008, 23:34   #3
Ananim-Pbl6ak
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 77
По умолчанию

большое спасибо если вам не сложно можете к проге пояснительный текст сделать?

Последний раз редактировалось Ananim-Pbl6ak; 30.12.2008 в 23:37.
Ananim-Pbl6ak вне форума Ответить с цитированием
Старый 31.12.2008, 00:05   #4
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Если сами прогу писали, то вам и так должно быть все понятно. Если нет, почитайте о строковых функциях в паскале. Их всего-то у вас две pos и delete. Pos возвращает позицию первого вхождения подстроки(в нашем случае одного символа) в строке, delete удаляет часть строки, начиная с позиции такой-то по такую-то…

А эта часть кода
Код:
 (Tekst[Pozicia - 1]= ' ')
проверяет стоит искомый символ в начале слова или нет
Gorychev вне форума Ответить с цитированием
Старый 01.01.2009, 17:41   #5
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
Program Laba4;
var
Tekst,TekstN:string;
pozicia:byte;
Symbol:char;
begin
write('Введите предложение: ');
readln(Tekst);
write('Введите букву слова начинающиеся с которой будем удалять: ');
readln(symbol);
TekstN:='';
while tekst<>'' do
begin
  pozicia:=pos(' ',tekst);
  if pozicia=0 then
  begin
   if (tekst[1]<>symbol) then tekstN:=tekstN+tekst;
  break
  end;
  if (pozicia<>0) and (tekst[1]<>symbol) then
   tekstN:=tekstN+copy(tekst,1,pozicia-1)+', ';
  delete (tekst,1,pozicia)
end;
if tekstN[length(tekstN)-2]=',' then 
 delete (tekstN,length(tekstN)-2,2);
writeln (TekstN);
readln
end.

Последний раз редактировалось capta1n; 01.01.2009 в 17:44.
capta1n вне форума Ответить с цитированием
Старый 02.01.2009, 00:31   #6
Tkirill
Форумчанин
 
Аватар для Tkirill
 
Регистрация: 22.12.2008
Сообщений: 104
По умолчанию

uses crt;
var
s,st,str:string;
i:integer;
c:char;
begin
clrscr;
write('Stroka -> ');
readln(s);
writeln;
write(' Bukva -> ');
readln(c);
i:=1;
s:=s+' ';
st:='';
str:='';
repeat
if s[i]<>' ' then st:=st+s[i]
else begin if st[1]<>c then str:=str+st+' '; st:=''; end;
i:=i+1;
until i>length(s);
writeln;
writeln;
writeln(str);
readln;
end.
@(o_0)@
Tkirill вне форума Ответить с цитированием
Старый 02.01.2009, 03:07   #7
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

!хорошо

Последний раз редактировалось capta1n; 02.01.2009 в 03:11.
capta1n вне форума Ответить с цитированием
Старый 02.01.2009, 17:46   #8
Tkirill
Форумчанин
 
Аватар для Tkirill
 
Регистрация: 22.12.2008
Сообщений: 104
По умолчанию можно еще так

uses crt;
label
metka;
var
s,st:string;
i,j:integer;
m:char;
begin
clrscr;
write(' stroka -> ');
readln(s);
writeln;
write(' bykva -> ');
readln(m);
writeln;
i:=1;
s:=s+' ';
st:='';
repeat
if s[i]<>' ' then st:=st+s[i]
else begin if st[1]=m then begin delete(s,i-length(st),length(st)+1); i:=1; st:=''; goto metka; end; st:=''; end;
i:=i+1;
metka:
until length(s)<i;
writeln(s);
readln;
end.
@(o_0)@
Tkirill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++,функции,работа со стрингами NamelessEndless Помощь студентам 3 12.11.2008 00:46
Исправить ошибку LLIypLLIyH Помощь студентам 5 16.06.2008 16:50
Помогите исправить программу нужно очень срочно! Алена Помощь студентам 3 04.11.2007 18:28
Исправить надо бы Fainder О форуме и сайтах клуба 2 19.10.2007 20:00