Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
1 / 1 / 4
Регистрация: 22.05.2012
Сообщений: 37
1

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

22.05.2012, 13:33. Показов 3770. Ответов 9
Метки нет (Все метки)

Безуспешно пытаюсь решить эту задачу, гугл не помогает:
Составьте программу вычеркивания из текста слов, содержащих букву "А"
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2012, 13:33
Ответы с готовыми решениями:

Удаление из текста слов
Очень нужна помощь... Вводится произвольный текст до точки, слова разделяются пробелом. Удалить из...

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

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

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

9
1294 / 466 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
24.05.2012, 14:09 2
"А" русская или латинская?

Добавлено через 22 секунды
нужны и "а" и "А"?
0
1 / 1 / 4
Регистрация: 22.05.2012
Сообщений: 37
24.05.2012, 14:15  [ТС] 3
Керра, без разницы, слова на русском, написанные транслитом (паскаль у нас не поддерживает русский язык). Т.е. a.
0
1294 / 466 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
24.05.2012, 14:23 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
26
27
28
29
30
31
32
33
34
uses crt;
 
var f1,f2: text;
    name,ourWord: string;
 
{--------------------------------------------------------------}
procedure readWord;
var ch: char;
begin
ourWord:='';
repeat
read(f1,ch);
if ch <> ' ' then ourWord:=ourWord + ch;
until (ch = ' ') or (eof(f1)) or (eoln(f1));
end;
{--------------------------------------------------------------}
 
 
begin clrscr;
write('Imea faila dlea chtenia: '); readln(name);
assign(f1,name); reset(f1);
write('Imea faila dlea zapisi: '); readln(name);
assign(f2,name); rewrite(f2);
 
while not eof(f1) do
 begin
 readWord;
 if (pos('A',ourWord) = 0) and (pos('a',ourWord) = 0)
  then write(f2,ourWord,' ');
 end;
 
close(f1); close(f2);
writeln('Slova bez bukvy A byli perepisany v fail ',name);
readkey; end.
1
1 / 1 / 4
Регистрация: 22.05.2012
Сообщений: 37
06.06.2012, 13:08  [ТС] 5
Программа выше работает, на мне надо сделать программу без файлов. То есть ввел текст в паскале и получил ответ там же
0
13077 / 5862 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
06.06.2012, 13:22 6
Предложу ещё одно решение:
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
program Project1;
 
const
  //Множество разделителей.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
  //Множество букв, на которые начинаются искомые слова.
  //Русская и английская буква "А".
  Da = ['А', 'а', 'A', 'a'];
var
  S : String;
  i, Len, LenW : Integer;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Len := Length(S);
    LenW := 0;
    //Перебор символов строки справа - налево.
    for i := Len downto 1 do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Очередной символ учитываем в длине слова.
      Inc(LenW);
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then begin
        if S[i] in Da then Delete(S, i, LenW);
        LenW := 0;
      end;
    end;
 
    //Ответ:
    Writeln('Текст после обработки:');
    Writeln(S);
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
Внимание! В связи с обсуждением в последующих постах темы, задним числом, уточняю: в этом посте представлено решение для случая, когда надо удалять те слова, которые начинаются на букву "А". Решение для случая, когда надо удалять те слова, которые содержат букву "А" опубликовано далее в теме.
0
1 / 1 / 4
Регистрация: 22.05.2012
Сообщений: 37
07.06.2012, 15:43  [ТС] 7
Mawrat, эта прога выводит в ответ тот же самый текст, который мы вводим в начале. И что это за #9 #10 #13 ?

Мне не надо там огромный текст отфильтровывать, просто несколько слов. Так что насчет строк не надо париться. Повтор ввода тоже можно выпилить. В общем, урезанно программа выглядит так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const
d=['.', ',', ':', ';', '!', '?', '-', ' '];
da=['A','a'];
var
s:string;
i,lenw:integer;
begin
repeat
writeln('Text: ');
readln(S);
lenw := 0;
for i := length(s) downto 1 do begin
if s[i] in d then Continue;
inc(Lenw);
if (i = 1) or (s[i - 1] in d) then begin
if s[i] in da then delete(s, i, LenW);
lenw := 0;
end;
end;
writeln('Otvet: ');
writeln(S);
until S <> '';
end.
Где тут ошибка?
0
13077 / 5862 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
07.06.2012, 16:00 8
Я сделал для случая, когда надо удалять те слова, которые начинаются на букву "А". Если надо удалять слова, в которых содержится буква "А", то надо немного подправить.
Сейчас напишу...
---
Готово:
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
program Project1;
 
const
  //Множество разделителей.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
  //Множество букв, на которые начинаются искомые слова.
  //Русская и английская буква "А".
  Da = ['А', 'а', 'A', 'a'];
var
  S : String;
  i, Len, LenW : Integer;
  F : Boolean;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S);
 
    Len := Length(S);
    LenW := 0;
    F := False;
    //Перебор символов строки справа - налево.
    for i := Len downto 1 do begin
      //Пропускаем разделители.
      if S[i] in D then Continue;
      //Проверка на наличие буквы "А".
      if not F and (S[i] in Da) then F := True;
      //Очередной символ учитываем в длине слова.
      Inc(LenW);
      //Отслеживаем начало слова.
      if (i = 1) or (S[i - 1] in D) then begin
        if F then Delete(S, i, LenW);
        LenW := 0;
        F := False;
      end;
    end;
 
    //Ответ:
    Writeln('Текст после обработки:');
    Writeln(S);
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
Здесь, вместо:
Pascal
1
2
      //Проверка на наличие буквы "А".
      if not F and (S[i] in Da) then F := True;
можно использовать упрощённый вариант:
Pascal
1
2
      //Проверка на наличие буквы "А".
      if S[i] in Da then F := True;
Цитата Сообщение от Svistunov Посмотреть сообщение
И что это за #9 #10 #13 ?
Это символы с кодами = 9, 10, 13. #9 - это знак табуляции, #10 - перенос строки, #13 - конец строки.
1
1 / 1 / 4
Регистрация: 22.05.2012
Сообщений: 37
07.06.2012, 16:24  [ТС] 9
Вот теперь работает, спасибо. Немного упростил (не нужны лишние знаки). Возможно ли сделать без оператора Continue и типа Boolean? (не проходили, скорее всего не примет)

Добавлено через 1 минуту
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
const
d=[' '];
da=['A','a'];
var
s:string;
i,lenW:integer;
f:boolean;
begin
repeat
writeln('Text: ');
readln(S);
lenW := 0;
f:=false;
for i := length(s) downto 1 do begin
if s[i] in d then continue;
if not f and (s[i] in Da) then f:=true;
lenW:=lenW+1;
if (i=1) or (s[i-1] in D) then begin
if f then delete(s,i,lenW);
lenW := 0;
f:=false;
end;
end;
writeln('Otvet: ');
writeln(s);
until s <> '';
readln
end.
0
13077 / 5862 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
07.06.2012, 20:34 10
Цитата Сообщение от Svistunov Посмотреть сообщение
Возможно ли сделать без оператора Continue и типа Boolean?
Без Continue так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    //Перебор символов строки справа - налево.
    for i := Len downto 1 do begin
      //Обрабатываем знаки, отличные от разделителей.
      if not (S[i] in D) then begin;
        //Проверка на наличие буквы "А".
        if not F and (S[i] in Da) then F := True;
        //Очередной символ учитываем в длине слова.
        Inc(LenW);
        //Отслеживаем начало слова.
        if (i = 1) or (S[i - 1] in D) then begin
          if F then Delete(S, i, LenW);
          LenW := 0;
          F := False;
        end;
      end;
    end;
Что касается Boolean. Если уже прошли операторы IF, WHILE, REPEAT и при этом не проходили тип Boolean - это вид юмора, я полагаю.
Тип Boolean определяет логический тип данных. Данные этого типа могут иметь только 2 значения - False (не истина, ложь) и True (истина).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2012, 20:34

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

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

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

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

Удаление определенных слов из текста
У меня есть два файла &quot;.txt&quot; в одном хранится текст, а в другом слова, которые запрещено...

Строки(стринг).....удаление слов из текста
искал по всему форуму, но подобной ситуации не нашёл( Задача такая: 1)вводится произвольный...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru