Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46

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

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

Студворк — интернет-сервис помощи студентам
Помогите пожаоуйста
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.09.2015, 06:14
Ответы с готовыми решениями:

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

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

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

25
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
14.09.2015, 07:14
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  [ТС]
Спасибо, как можно подсчитать количество найденных слов???

Добавлено через 4 часа 8 минут
Puporev, Спасибо, как можно подсчитать количество найденных слов???
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.01.2016, 20:16
В смысле не всего слов, а слов, равных введенному в Edit?
0
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
11.01.2016, 20:21
Цитата Сообщение от 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
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
11.01.2016, 20:26
Вот так напиши и проверь, писал не глядя. Если найдешь ошибки скинь в тему архив проекта и тестовый файл.
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
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
11.01.2016, 21:06
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  [ТС]
Puporev, AHBAR, он не считает слова с маленькой буквы
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
12.01.2016, 08:15
Вариант с поиском введенного слова в любом регистре и подсчетом его количества в тексте:
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
 Аватар для AHBAR
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,141
12.01.2016, 10:22
Цитата Сообщение от Скандербег Посмотреть сообщение
Вариант с поиском введенного слова в любом регистре и подсчетом его количества в тексте:
все бы ничего но ваш код ищет вхождение набора символов а не слова. представьте текст:
"Некоторый код не ищет слово"
не - встречается 2 раза как набор символов, а как слово - 1 раз
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
12.01.2016, 10:34
Да, и то правда. Простота кода не оправдана.
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 20:24  [ТС]
AHBAR, какой код можно ввести, что бы он считавал и малеькие буквы?

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

Добавлено через 1 минуту
Puporev, если я напишу слово Сок, он найдет его, но не найдет слово сок которое начинается с маленькой буквы
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
12.01.2016, 20:41
Странно я написал почти тоже
Строка 16 в моем коде
Delphi
1
p:=pos(AnsiLowerCase(s),AnsiLowerCase(sl));//есть ли последовательность букв слова есть в строке
и все работает
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 20:42  [ТС]
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
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
12.01.2016, 20:42
У меня первой стояло s(слово), вторым s1(строка)
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 20:44  [ТС]
Puporev, Сможете вашу программу полностью скинуть
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
12.01.2016, 20:46
Когда копируешь код с кириллицей переключай раскладку клавы на русскую, кому нафиг нужны твои каракули.

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

Добавлено через 29 секунд
Код мой есть в теме, смени одну строку.
0
1 / 1 / 1
Регистрация: 24.12.2014
Сообщений: 46
12.01.2016, 21:13  [ТС]
Puporev, посмотри, там ошибку выдает
Вложения
Тип файла: zip Задача 2.zip (539.5 Кб, 8 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2016, 21:13
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru