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

Формирование массива слов и удаление из текста слов, которые встречаются заданное число раз

16.07.2019, 17:01. Показов 1947. Ответов 9

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Помогите, пожалуйста!
Задача заключается в том, что нужно из введенного текста составить массив слов, обработать этот массив, удалив из него слова, встречающиеся заданное количество раз, сохранить обработанный текст в текстовый файл и вывести его в memo2
Имеется memo1, куда вводим текст, который нужно обработать; memo2, куда нужно вывести обработанный текст; edit1, куда задаем количество n, и кнопка

Сформировал массив и сделал его сохранение в текстовый файл и вывод в мемо, вроде правильно, а вот с самой обработкой туплю неимоверно

Delphi
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
46
47
48
49
50
51
52
procedure TfmMain.Button1Click(Sender: TObject);
 var m: array[0..100] of string;
  i,j,n,w: integer;
 F1,F2: TextFile;
  sim: char;
  s: string;
begin
 AssignFile(F1,'ex1.txt');
 AssignFile(F2,'ex2.txt');
 
 begin;
  Rewrite(F1);
  Writeln(F1,memo1.Text);
  CloseFile(F1);
 end;
  j:=0;
 
  with Memo1 do
 
   begin
    for n:=0 to lines.count-1 do
     begin
     s:= lines[n]+' ';
      for i:=1 to length(s) do
        begin
        m[j]:=m[j]+copy(s,i,1);
        if (copy(s,i,1)=' ') then
        j:=j+1;
        end;
     end;
  end;
 
  w:= StrToInt(Edit1.Text);
 .
 .
 .
 .
Rewrite(F2);
  for j:=0 to length(s)-1 do
    write(F2,m[j]);
 
  Reset(F2);
  memo2.lines.clear;
 
while not Eof(F2) do
    begin
      Read(F2,sim);
      Memo2.Text:=Memo2.Text+sim
    end;
    CloseFile(F2);
 
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2019, 17:01
Ответы с готовыми решениями:

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

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

Из текста удалить все слова, которые встречаются заданное число раз
написать программу на delphi которая обрабатывает текст (вводится в мемо) таким образом, что из...

Удалить слова которые встречаются заданное число раз
Кому не сложно, перенесите пожалуйста с pascal на C++ Program anton; uses crt; const n=10;...

9
Модератор
9056 / 5853 / 2335
Регистрация: 21.01.2014
Сообщений: 25,036
Записей в блоге: 3
16.07.2019, 17:27 2
Barabashka-, а что это за чудеса у Вас между 31 и 38 строками кода? Или Вы не знаете, что в GUI-приложениях Delphi код выполняется только в методах класса формы и в независимых процедурах?

Добавлено через 2 минуты
Цитата Сообщение от Barabashka- Посмотреть сообщение
вроде правильно
Вообще - чепуха чепуховая у Вас там написана...
0
0 / 0 / 0
Регистрация: 12.07.2019
Сообщений: 7
16.07.2019, 21:08  [ТС] 3
Хорошо, если опустить эти неправильные части. Помогите, пожалуйста, написать код по удалению слов, встречающихся заданное количество раз.
0
2962 / 1600 / 637
Регистрация: 19.03.2019
Сообщений: 5,232
17.07.2019, 09:45 4
Цитата Сообщение от Barabashka- Посмотреть сообщение
Помогите, пожалуйста, написать код по удалению слов, встречающихся заданное количество раз.
чем у тебя разделяются слова?
После удаления слов пробелы/знаки препинания нужно оставить?
а ещё приведи простой пример - Дан Текст, дано N, после удаления получился такой Текст.
0
0 / 0 / 0
Регистрация: 12.07.2019
Сообщений: 7
17.07.2019, 13:08  [ТС] 5
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
чем у тебя разделяются слова?
После удаления слов пробелы/знаки препинания нужно оставить?
а ещё приведи простой пример - Дан Текст, дано N, после удаления получился такой Текст.
Слова разделены пробелами
Пример:
Вводим в memo1 текст: мяч кошка стол мяч стол медведь стол стол
Указываем в edit1 число: 2
В memo2 выводится: кошка стол стол медведь стол стол
Т. е. удалились слова, которые встречаются ровно указанное число раз, в этом случае "мяч"

Если введем в edit1 число: 1
В memo2 выводится: мяч стол мяч стол стол стол
В этом случае удалится "кошка" и "медведь", т.к. они встречаются ровно по 1-му разу
0
2962 / 1600 / 637
Регистрация: 19.03.2019
Сообщений: 5,232
17.07.2019, 14:05 6
Лучший ответ Сообщение было отмечено Barabashka- как решение

Решение

Цитата Сообщение от Barabashka- Посмотреть сообщение
Слова разделены пробелами
тогда вообще уже ничего писать не надо.
можешь брать готовый код D1973 - он уже всё за тебя написал.

Исключение слов из текста


Цитата Сообщение от Barabashka- Посмотреть сообщение
edit1, куда задаем количество n
немного преобразовал код Дмитрия, надеюсь, он на меня не обидится.

забирай:
Delphi
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 TFormX.Button1Click(Sender: TObject);
var L, Rez: TStringList;
    i, k, n: integer;
    s : string;
begin
  n := StrToInt(Edit1.Text);
  L := TStringList.Create;
  L.CommaText := AnsiLowerCase(Memo1.Text);
  Rez := TStringList.Create;
  for i := 0 to L.Count - 1 do
    begin
      k := Rez.IndexOf(L.Strings[i]);
      if k = -1 then
        Rez.AddObject(L.Strings[i], TObject(1))
      else Rez.Objects[k] := TObject(integer(Rez.Objects[k]) + 1);
    end;
  s := '';
  for i := 0 to L.Count - 1 do begin
     k := Rez.IndexOf(L.Strings[i]);
     if integer(Rez.Objects[k]) <> n then s := s + L.Strings[i]+' ';
  end;
  Memo2.Text := s;
  L.Free;
  Rez.Free;
end;
Добавлено через 3 минуты
Учти, что загружать текст в Мемо можно через метод LoadFromFile()
Delphi
1
Memo1.Lines.LoadFromFile('имяфайла.txt');
а сохранять через метод SaveToFile()
Delphi
1
Memo2.Lines.SaveToFile('Новыйфайл.txt');
1
0 / 0 / 0
Регистрация: 12.07.2019
Сообщений: 7
17.07.2019, 19:30  [ТС] 7
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
забирай:
Извиняюсь. Можно, пожалуйста, добавить комментарии к программе?
0
Модератор
9056 / 5853 / 2335
Регистрация: 21.01.2014
Сообщений: 25,036
Записей в блоге: 3
18.07.2019, 06:07 8
Delphi
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
procedure TFormX.Button1Click(Sender: TObject); //Реализация метода формы FormX - обработчик события нажатия на кнопку Button1
var L, Rez: TStringList; //Объявление 2-х переменных типа Список строк
    i, k, n: integer; //объявление 3-х целочисленных переменных
begin
//присваивание переменной n данных введенных в Эдит1 с преобразованием строкового значения в числовое
//n - число вхождений слова в текст
  n := StrToInt(Edit1.Text); 
//создаем рабочий экземпляр СтрингЛиста и присваиваем этот экземпляр переменной L
  L := TStringList.Create; 
//Заполняем рабочий список строк текстом из Мемо1 с одновременной разбивкой на отдельные слова
//при этом слова сразу переводятся в нижний регистр
//При использовании метода CommaText разделителями будут являться запятая и пробел
  L.CommaText := AnsiLowerCase(Memo1.Text); 
//создаем результирующий экземпляр СтрингЛиста и присваиваем этот экземпляр переменной Rez
  Rez := TStringList.Create;
//начинаем обход рабочего списка строк в цикле, где на каждой итерации...
  for i := 0 to L.Count - 1 do
    begin
//проверяем имеется ли очередное слово из рабочего списка в результирующем. Номер позиции слова записываем в переменную k
//Если слово не найдено - переменная k получит значение -1
      k := Rez.IndexOf(L.Strings[i]);
//Если слово не найдено, то...
      if k = -1 then
//добавляем в результирующий список очередное слово из рабочего списка и объект, в котором будем хранить количество вхождений слова
//т.к. слова в результирующем списке еще не было - значением объекта будет 1
        Rez.AddObject(L.Strings[i], TObject(1))
//иначе - извлекаем объект из k-той строки результирующего списка, преобразовываем этот объект в целочисленный тип,
//увеличиваем его значение на 1 и снова ассоциируем с объектом k-той строки, преобразовав целое число в тип TObject
      else Rez.Objects[k] := TObject(integer(Rez.Objects[k]) + 1);
    end;
//Очищаем результирующее поле Мемо2
  Memo2.Lines.Clear;
//Начинаем цикл обхода результирующего списка строк, где на каждой итерации...
  for i := 0 to Rez.Count - 1 do 
//проверяем, если значение очередного объекта, преобразованного в целочисленный тип, не равно числу вхождений слова в текст
//то добавляем это слово в результирующее поле Мемо2
//в итоге в результирующем поле Мемо2 останутся только те слова, число вхождений в исходный текст которых больше или меньше (но не равно!!!) числа N
     if integer(Rez.Objects[k]) <> n then Memo2.Lines.Add(Rez.Strings[i];
//удаляем рабочий и результирующий списки строк
  L.Free;
  Rez.Free;
end; //GAME OVER!!!
2
mr-Crocodile
18.07.2019, 11:16
  #9

Не по теме:

D1973, потрясён вашим трудолюбием! Я бы так подробно точно не стал расписывать.

0
Модератор
9056 / 5853 / 2335
Регистрация: 21.01.2014
Сообщений: 25,036
Записей в блоге: 3
18.07.2019, 11:21 10
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
потрясён вашим трудолюбием!
Сегодня на работе скучно и тихо... Странно даже, явно не к добру (тьфу-тьфу-тьфу)... Но надо же что-то делать, чтобы не храпеть
0
18.07.2019, 11:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2019, 11:21
Помогаю со студенческими работами здесь

Вывод слов которые встречаются 3 и больше раз
Надо найти все слова которые встречаются в корпусе Brown, три и более раза

Удалить из заданного текста те слова, которые встречаются в нем заданное количество раз
Удалить из заданного текста те слова, которые встречаются в нем заданное количество раз. Вычислить...

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

Подсчитать количество слов, которые встречаются в предложении ровно 1 раз
Очень прошу помочь написать программу: Дано предложение, состоящее из слов, разделенных...


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

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

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