1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
1

Дан файл содержащий текст на русском языке. Выяснить, входит ли введенное с клавиатуры слово в указанный текст

14.09.2015, 06:14. Показов 2533. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожаоуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2015, 06:14
Ответы с готовыми решениями:

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

Строки. Выяснить, входит ли данное слово в указанный текст
Дан текст на русском языке. Выяснить, входит ли данное слово в указанный текст, и если да, то...

Дан файл, содержащий текст на русском языке. Составить в алфавитном порядке список всех слов, встречающихся в этом тексте
Помогите пожалуйста :cry:

Дан текст на русском языке. Определить сколько раз в нем встречается самое длинное слово
Дан текст на русском языке. Определить сколько раз встречается самое длинное слово? Язык...

25
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
14.09.2015, 07:14 2
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
procedure TForm1.Button1Click(Sender: TObject);
//разделители слов, можно добавить еще
const rz=[' ',',','.','?','!','(',')'];
var t:TStringList;
    s,s1:string;
    i,k,p:integer;
begin
t:=TStringList.Create; //создаем список строк
t.LoadFromFile('1.txt');//грузим в него наш файл(он в папке с программой)
s:=Edit1.Text;//слово для поиска
k:=0;//пока нет
i:=0;//начнем с начала списка
while(i<t.Count)and(k=0) do
 begin
  s1:=t[i];
  p:=pos(s,s1);//есть ли последовательность букв слова есть в строке
  //если есть(p>0)и оно первое или перед ним разделитель
  //или оно последнее или за ним разделитель
  if (p>0)and((p=1)or(s1[p-1] in rz))and((p+length(s)=length(s1)-1)
  or(s1[p+length(s)]in rz))then k:=1
  else inc(i);
 end;
if k=0 then showmessage('Слова '+s+' в файле нет')
else showmessage('Слово '+s+' в файле есть')
end;
 
end.
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
11.01.2016, 19:59  [ТС] 3
Спасибо, как можно подсчитать количество найденных слов???

Добавлено через 4 часа 8 минут
Puporev, Спасибо, как можно подсчитать количество найденных слов???
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
11.01.2016, 20:16 4
В смысле не всего слов, а слов, равных введенному в Edit?
0
1069 / 482 / 314
Регистрация: 05.04.2013
Сообщений: 2,112
11.01.2016, 20:21 5
Цитата Сообщение от Madi1991 Посмотреть сообщение
Спасибо, как можно подсчитать количество найденных слов???
измени цикл немного
Delphi
1
2
3
if (p>0)and((p=1)or(s1[p-1] in rz))and((p+length(s)=length(s1)-1)
  or(s1[p+length(s)]in rz))then k:= k + 1;
inc(i);// без else
потом
Delphi
1
2
if k=0 then showmessage('Слова '+s+' в файле нет')
else showmessage('Слово '+s+' в файле есть и встречается '+IntToStr(k)+' раз(а)')
Добавлено через 1 минуту
я поторопился, надо еще удалять часть строки, так как в одной строке несколько раз может встретитться
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
11.01.2016, 20:26 6
Вот так напиши и проверь, писал не глядя. Если найдешь ошибки скинь в тему архив проекта и тестовый файл.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
k:=0;//пока нет
for i:=0 to t.Count-1 do
 begin
  s1:=t[i];
  p:=pos(s,s1);
  while p>0 do
   begin
    if (p=1)or(s1[p-1] in rz))and((p+length(s)=length(s1)-1)
    or(s1[p+length(s)]in rz))then
     begin
      k:=k+1;
      delete(t[i],1,p+length(s)-1);
     end;
   end;
 end;
if k=0 then showmessage('Слова '+s+' в файле нет')
else showmessage('Количество слов '+s+' ='+inttostr(k))
0
1069 / 482 / 314
Регистрация: 05.04.2013
Сообщений: 2,112
11.01.2016, 21:06 7
Puporev,
на основе вашего первоначального кода я переписал, но почему-то не считал за слово если искомое слово стоит в конце строки, не разобрался. поэтому просто сделал так:
Delphi
1
s1:=t[i] + ' ';
в итоге получился рабочий код так:
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
procedure TForm1.Button1Click(Sender: TObject);
//разделители слов, можно добавить еще
const rz=[' ',',','.','?','!','(',')'];
var t:TStringList;
    s,s1:string;
    i,k,p:integer;
begin
t:=TStringList.Create; //создаем список строк
t.LoadFromFile('1.txt');//грузим в него наш файл(он в папке с программой)
s:=Edit1.Text;//слово для поиска
k:=0;//пока нет
i:=0;//начнем с начала списка
while(i<t.Count) do
 begin
  s1:=t[i] + ' ';
  p:=pos(s,s1);//есть ли последовательность букв слова есть в строке
  //если есть(p>0)и оно первое или перед ним разделитель
  //или оно последнее или за ним разделитель
      if (p>0)and((p=1)or(s1[p-1] in rz))and((p+length(s)=length(s1)-1)
      or(s1[p+length(s)]in rz))then
//      if  ( (p=1) and (s1[length(s)+1] in rz) )
//      or ( (p=Length(s1)-Length(s)+1) and (s[Length(s1)-Length(s)] in rz) )
//      or ( (s1[length(s)+1] in rz) and (s[Length(s1)-Length(s)] in rz ) )
//      then
      begin
  k := k + 1;
  delete(s1,Pos(s,s1),Length(s));
  t[i] := s1;
  i := i - 1;
  end;
  inc(i);
 end;
if k=0 then showmessage('Слова '+s+' в файле нет')
else showmessage('Слово '+s+' в файле есть и встречается '+IntToStr(k)+' раз(а)');
end;
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 07:39  [ТС] 8
Puporev, AHBAR, он не считает слова с маленькой буквы
0
1073 / 986 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
12.01.2016, 08:15 9
Вариант с поиском введенного слова в любом регистре и подсчетом его количества в тексте:
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
uses StrUtils;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  SL : TStringList;
  SE, SS : string;
  K, C : Integer;
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile('1.txt');
    SS := AnsiUpperCase(SL.Text);
    SE := AnsiUpperCase(Edit1.Text);
    if (SS <> '') and (Pos(SE, SS) > 0) then begin
      C := 0;
      K := Pos(SE, SS);
      while K > 0 do begin
        Inc(C);
        K := PosEx(SE, SS, K+1);
      end;
      ShowMessage('Слов найдено: '+IntToStr(C));
    end else
      ShowMessage('Слова нет')
  finally
    SL.Free;
  end;
end;
0
1069 / 482 / 314
Регистрация: 05.04.2013
Сообщений: 2,112
12.01.2016, 10:22 10
Цитата Сообщение от Скандербег Посмотреть сообщение
Вариант с поиском введенного слова в любом регистре и подсчетом его количества в тексте:
все бы ничего но ваш код ищет вхождение набора символов а не слова. представьте текст:
"Некоторый код не ищет слово"
не - встречается 2 раза как набор символов, а как слово - 1 раз
0
1073 / 986 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
12.01.2016, 10:34 11
Да, и то правда. Простота кода не оправдана.
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 20:24  [ТС] 12
AHBAR, какой код можно ввести, что бы он считавал и малеькие буквы?

Добавлено через 4 часа 43 минуты
Puporev, AHBAR, нужно регистр убрать
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
12.01.2016, 20:34 13
Цитата Сообщение от Madi1991 Посмотреть сообщение
нужно регистр убрать
В смысле чтобы слова типа ВеснА и веСНа читались как одно слово?
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 20:41  [ТС] 14
Puporev, да, p:=pos(AnsiUpperCase(s1),AnsiUpperCase(s)) я поставил это строку что бы он их в один регистр переводил, но прога ошибку выдает

Добавлено через 1 минуту
Puporev, если я напишу слово Сок, он найдет его, но не найдет слово сок которое начинается с маленькой буквы
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
12.01.2016, 20:41 15
Странно я написал почти тоже
Строка 16 в моем коде
Delphi
1
p:=pos(AnsiLowerCase(s),AnsiLowerCase(sl));//есть ли последовательность букв слова есть в строке
и все работает
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 20:42  [ТС] 16
Puporev,
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
while(i<t.Count) do
 begin
 s1:=t[i] + ' ';
  p:=pos(AnsiUpperCase(s1),AnsiUpperCase(s))//åñòü ëè ïîñëåäîâàòåëüíîñòü áóêâ ñëîâà åñòü â ñòðîêå
  //åñëè åñòü (p>0)è îíî ïåðâîå èëè ïåðåä íèì ðàçäåëèòåëü
  //èëè îíî ïîñëåäíåå èëè çà íèì ðàçäåëèòåëü
      if (p>0)and((p=1)or(s1[p-1] in rz))and((p+length(s)=length(s1)-1)
      or(s1[p+length(s)]in rz))then
//      if  ( (p=1) and (s1[length(s)+1] in rz) )
//      or ( (p=Length(s1)-Length(s)+1) and (s[Length(s1)-Length(s)] in rz) )
//      or ( (s1[length(s)+1] in rz) and (s[Length(s1)-Length(s)] in rz ) )
//      then
      begin
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
12.01.2016, 20:42 17
У меня первой стояло s(слово), вторым s1(строка)
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 20:44  [ТС] 18
Puporev, Сможете вашу программу полностью скинуть
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
12.01.2016, 20:46 19
Когда копируешь код с кириллицей переключай раскладку клавы на русскую, кому нафиг нужны твои каракули.

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

Добавлено через 29 секунд
Код мой есть в теме, смени одну строку.
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 21:13  [ТС] 20
Puporev, посмотри, там ошибку выдает
Вложения
Тип файла: zip Задача 2.zip (539.5 Кб, 8 просмотров)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2016, 21:13
Помогаю со студенческими работами здесь

Дан текст на русском языке и некоторая буква. Найти слово, содержащее наибольшее количество указанных букв.
Дан текст на русском языке и некоторая буква. Найти слово, содержащее наибольшее количество...

Дан текст на русском языке. Напечатать в алфавитном порядке
Дан текст на русском языке. Напечатать в алфавитном порядке все глухие согласные буквы, которые не...

Дан текст на русском языке: Записать его в разборку через пробел
Помогите пожалуйста с программой исходный текст записан в мемо1 Нужно что бы каждая буква текста...

Дан текст на русском языке с разделителями. Записать его в разрядку через пробел
Помогите пожалуйста. Текст записан в мемо1, надо записать измененный текст в мемо2. Разделители -...


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

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

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