0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
1

Удаление из текста слов

06.09.2009, 00:51. Показов 2886. Ответов 19
Метки нет (Все метки)

Очень нужна помощь...
Вводится произвольный текст до точки, слова разделяются пробелом. Удалить из него все слова, которые начинаются с гласных. Не использовать тип данных string, решить необходимо через char.
С процедурой удаления и процедурой нахождения слов, которые начинаются с гласной.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2009, 00:51
Ответы с готовыми решениями:

Из слов заданного текста составить цепочку слов максимальной длины
задача: Из слов заданного текста составить цепочку слов максимальной длины, в которой каждое...

Удаление слов из текста
Безуспешно пытаюсь решить эту задачу, гугл не помогает: Составьте программу вычеркивания из текста...

Удаление первых слов в каждом предложении текста
Совсем не понимаю, как это сделать! Помогите кто-нибудь?

Формирование массива слов и удаление из текста слов, которые встречаются заданное число раз
Доброго времени суток. Помогите, пожалуйста! Задача заключается в том, что нужно из введенного...

19
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
06.09.2009, 10:21 2
С процедурой удаления и процедурой нахождения слов, которые начинаются с гласной.
Если это точно изложено задание, то непонятно зачем 2 процедуры, ведь сами слова нам не нужны, их просто нужно удалить, поэтому поиск и удаление можно делать в одной процедуре. Ничего не сказано про лишние пробелы, поэтому их оставляем.
Pascal
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
28
29
30
31
32
33
34
35
uses crt;
const gl=['A','E','I','O','U','Y','a','e','i','o','u','y'];{на примере латинских букв}
type mass=array[1..1000] of char;
procedure Del(var m:mass;var n:integer);
var i,j:integer;
begin
i:=1;
while i<=n do
if (m[i] in gl)and((m[i-1]=' ')or(i=1))then{если гласная и перед ней пробел или она первая}
while not(m[i] in [' ','.']) do{то пока не пробел тли точка}
 begin
  for j:=i to n-1 do m[j]:=m[j+1];{сдвигаем массив влево, удаляя смволы этого слова до пробела или точки}
  n:=n-1;{уменьшаем размер массива}
 end
else i:=i+1;{иначе идем дальше}
end;
var a:mass;
    c:char;
    n,i:integer;
begin
clrscr;
writeln('Введите текст, слова разделить пробелом, окончание ввода точка:');
n:=0;
repeat
n:=n+1;
a[n]:=readkey;{читаем символ-код нажатой клавиши, записываем в массив}
write(a[n]);{выводим}
until a[n]='.';{точка-конец ввода}
writeln;
Del(a,n);{вызываем процедуру}
writeln('Измененный текст:');
for i:=1 to n do
write(a[i]);
readln
end.
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
06.09.2009, 10:37  [ТС] 3
а если убирать лишние пробелы?
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
06.09.2009, 10:51 4
Тогда процедуру можно написать так, хотя можно как-то и оптимизировать, если удалять пробел не после удаленного слова, а перед ним, если оно не первое, но что-то с ходу не придумал, может сами подумаете.
Pascal
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
procedure Del(var m:mass;var n:integer);
var i,j:integer;
begin
i:=1;
while i<=n do
if (m[i] in gl)and((m[i-1]=' ')or(i=1))then
 begin
  while not(m[i] in [' ','.']) do
   begin
    for j:=i to n-1 do m[j]:=m[j+1];
    n:=n-1;
   end;
  if m[i]=' ' then{после удаления слова после него остался ненужный пробел }
   begin
    for j:=i to n-1 do m[j]:=m[j+1];{сдвинем массив на 1 влево, уберем его}
    n:=n-1;
   end;
  end
else i:=i+1;
if m[n-1]=' 'then{если перед точкой остался пробел, уберем его }
 begin
  m[n-1]:=m[n];
  n:=n-1;
 end;
end;
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
06.09.2009, 10:54  [ТС] 5
Благодарю)
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
06.09.2009, 13:11  [ТС] 6
только что-то у меня не работает....=(
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
06.09.2009, 13:32 7
Не знаю что у Вас не работает, отсюда не видно. У меня работает. Например по второму варианту
ввод asd asd asd tt asd tt.
вывод
tt tt.
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
06.09.2009, 16:50  [ТС] 8
да как так-то!?
делаю такой же ввод, вывод: sd tt
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
06.09.2009, 17:07 9
У меня вроде работает)
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
06.09.2009, 17:39  [ТС] 10
galileopro, вроде или работает?
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
06.09.2009, 17:43 11
Я не знаю, списать не можете.
Вложения
Тип файла: rar 1_2.rar (552 байт, 11 просмотров)
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
06.09.2009, 20:25 12
gery, все работает. Пишите ошибку сюда, если у Вас не работает.
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
06.09.2009, 21:44  [ТС] 13
мне эт задачку еще через string надо сделать...

я пыталась получилось не очень

Pascal
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
var s,s1,s2,s3,a:string;
x,n,i:integer;
begin
writeln('vvedite tekst');
readln(s);
s:=' '+s;
i:=0;
a:='';
while i <= length(s) do begin
i:=i+1;
s1:=copy(s,i,1);
s2:=copy(s,i+1,1);
if s1=' ' then if ((s2='a') or (s2='e') or (s2='u') or (s2='i')
or (s2='o') then begin
repeat
i:=i+1;
s3:=copy(s,i,1)
until s3<>' ';
i:=i+1
end
else a:=a+s1
end;
s1:=copy(a,1,1);
if s1=' ' then delete(a,1,1);
writeln(a);
readln
end.
0
4337 / 1469 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
06.09.2009, 21:49 14
Pascal
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
28
29
30
31
32
33
34
35
program kkk;
uses crt;
const pp:set of char=[' ','?','!',':',';',',','.','_'];
        gl:set of char=['a','o','e','y','u','i','A','O','E','Y','U','I]';
var count,i,j:integer;
    f:boolean;
    st,buf:string;
    slova:array[1..100]of string;
 
begin
 clrscr;
 write('Stroka -> ');
 readln(st);
 count:=1;
 repeat
  if (st[1] in pp) or (length(st)=0) then while st[1] in pp do delete(st,1,1)
  else
  begin
   while not(st[1] in pp) and (length(st)>0) do
   begin
    buf:=buf+st[1];
    delete(st,1,1);
   end;
  slova[count]:=buf;
  buf:='';
  inc(count);
  end;
 until (length(st)=0) and (length(buf)=0);
 
  st:='';
  for i:=1 to count-1 do
  if not(slova[i][1] in gl) then st:=st+slova[i]+' ';
  writeln(st);
 readln;
end.
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
06.09.2009, 22:08 15
Поскольку строка это тот же массив символов, можно все также написать, только по другому уменьшать длину массива.
Pascal
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
uses crt;
const gl=['A','E','I','O','U','Y','a','e','i','o','u','y'];
procedure Del(var st:string);
var i,j:integer;
begin
i:=1;
while i<=length(st) do
if (st[i] in gl)and((st[i-1]=' ')or(i=1))then
 begin
  while not(st[i] in [' ','.']) do
   begin
    for j:=i to length(st)-1 do st[j]:=st[j+1];
    delete(st,length(st),1);
   end;
  if st[i]=' ' then
   begin
    for j:=i to length(st)-1 do st[j]:=st[j+1];
    delete(st,length(st),1);
   end;
  end
else i:=i+1;
if st[length(st)-1]=' 'then
 begin
  st[length(st)-1]:=st[length(st)];
  delete(st,length(st),1);
 end;
end;
var s:string;
    c:char;
    i:integer;
begin
clrscr;
writeln('Введите текст, слова разделить пробелом, окончание ввода точка:');
s:='';
repeat
c:=readkey;
s:=s+c;
write(c);
until c='.';
writeln;
Del(s);
writeln('Измененный текст:');
write(s);
readln
end.
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
12.09.2009, 19:55  [ТС] 16
Цитата Сообщение от Puporev Посмотреть сообщение
Pascal
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
28
29
30
31
32
33
34
35
uses crt;
const gl=['A','E','I','O','U','Y','a','e','i','o','u','y'];{на примере латинских букв}
type mass=array[1..1000] of char;
procedure Del(var m:mass;var n:integer);
var i,j:integer;
begin
i:=1;
while i<=n do
if (m[i] in gl)and((m[i-1]=' ')or(i=1))then{если гласная и перед ней пробел или она первая}
while not(m[i] in [' ','.']) do{то пока не пробел тли точка}
 begin
  for j:=i to n-1 do m[j]:=m[j+1];{сдвигаем массив влево, удаляя смволы этого слова до пробела или точки}
  n:=n-1;{уменьшаем размер массива}
 end
else i:=i+1;{иначе идем дальше}
end;
var a:mass;
    c:char;
    n,i:integer;
begin
clrscr;
writeln('Введите текст, слова разделить пробелом, окончание ввода точка:');
n:=0;
repeat
n:=n+1;
a[n]:=readkey;{читаем символ-код нажатой клавиши, записываем в массив}
write(a[n]);{выводим}
until a[n]='.';{точка-конец ввода}
writeln;
Del(a,n);{вызываем процедуру}
writeln('Измененный текст:');
for i:=1 to n do
write(a[i]);
readln
end.
что такое n в описании функции?
"while i<=n do" эт что такое?
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
12.09.2009, 19:57 17
что такое n в описании функции?
Ну это же очевидно! Это длина(размер, количество элементов)массива.
0
Пробующий
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101
12.09.2009, 19:58 18
Delphi
1
n
- количество введенніх символов включая точку.
0
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 9
20.09.2009, 16:30  [ТС] 19
Не могу разобраться, как сделать удаление. Если бы было 3 строки:входная, выходная и еще одна из гласных.
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
20.09.2009, 17:19 20
gery, Вы очень затянули эту тему и она уже никому кроме Вас не интересна, поскольку все что Вы просили, Вам написали.
Поэтому создайте новую тему, где четко изложите новое задание, забыв все что писали до этого. Задание не надо писать своими словами и объяснять нам, тупым, что и как надо делать. Напишите точно так, как его Вам дали.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2009, 17:19

Удаление слов из текста
Добрый день! есть задачка: Определить самое короткое слово в каждом предложении. Удалить эти слова...

Удаление слов из текста
Можно простой пример как правильно удалять слова из текста при помощи обычных строковых функций? В...

Удаление слов из текста
Дан текст. Из него нужно удалить слова определенные слова. Как реализовать сей код?

Удаление слов из текста...
Удалить слова из данного текстового файла, длина которых превышает задаваемое число n.Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.