Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 20.09.2019
Сообщений: 61

Поиск слова в строке

16.11.2019, 19:10. Показов 8339. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Меня интересует как можно реализовать поиск определенного слова в строке. В стандартной библиотеке существует метод find(const string pattern), который возвращает индекс первого вхождения образца, однако мне нужно искать именно слово, в его естественном смысле.

Например,

в предложении "A fishman brought a fish" нужно найти вхождения слова "fish". приведенный выше метод вернет индекс 2, то есть первый символ слова "fishman".

Единственное, что мне удалось придумать - это связка if-ов, которые ищет образец, ограниченный символами пробела или знаками препинания.

C++
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
    int _find(string sentence, string word)
    {
        if (sentence.find(word+"?") != string::npos)
            return sentence.find(word+"?");
 
        if (sentence.find(word+"!") != string::npos)
            return sentence.find(word+"!");
 
        if (sentence.find(word+".") != string::npos)
            return sentence.find(word+".");
 
        if (sentence.find(word+" ") != string::npos)
            return sentence.find(word+" ");
 
        if (sentence.find(" "+word+".") != string::npos)
            return sentence.find(" "+word+".") + 1;
        
        if (sentence.find(" "+word+"!") != string::npos)
            return sentence.find(" "+word+"!") + 1;
        
        if (sentence.find(" "+word+"?") != string::npos)
            return sentence.find(" "+word+"?") + 1;
        
        if (sentence.find(" "+word+",") != string::npos)
            return sentence.find(" "+word+",") + 1;
 
        if (sentence.find("\""+word+"\"") != string::npos)
            return sentence.find("\""+word+"\"") + 1;       
 
        if (sentence.find(" "+word+" ") != string::npos)
            return sentence.find(" "+word+" ") + 1;
 
        return -1;
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2019, 19:10
Ответы с готовыми решениями:

Поиск слова в строке
Дано: массив a типа char, вводится с клавиатуры. Дана переменная s, в которую вводится любое слово с клавиатуры. Проверить массив на...

Поиск слова в строке
Реализовать и использовать функцию поиска слова в строке: int searchWord( const char str, const char word); Входные данные: str...

Поиск слова в строке
вот есть программка, которая должна искать слово word_r (отдельный файл) в строке rus (отедельный файл) и в случае нахождения выводить на...

11
Злостный нарушитель
 Аватар для Verevkin
10339 / 5757 / 1269
Регистрация: 12.03.2015
Сообщений: 26,583
16.11.2019, 20:23
Поиск подстроки и поиск слова - это две большие разницы, имеющие между собой больше различий, чем сходства.
Для поиска слова первое, что надо сделать - это сформировать из исходной строки список слов.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
16.11.2019, 20:24

Не по теме:

Verevkin, смини ка аватар, бесит https://www.youtube.com/watch?v=Bq0WHCkBv3A

0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
16.11.2019, 20:24
constantin01, можно искать слово + знак разделителя, к примеру:
C++
1
sentence.find("word.")
Но делать для каждого разделителя, это плохо. Нужно после нахождения проверить следующий символ (после искомого слова) проверять на разделитель, делать это естественно в отдельной функции.
0
Злостный нарушитель
 Аватар для Verevkin
10339 / 5757 / 1269
Регистрация: 12.03.2015
Сообщений: 26,583
16.11.2019, 20:29
Цитата Сообщение от _stanislav Посмотреть сообщение
Verevkin, сними ка аватар
Его до меня уже давно снял один чувак по имени Джеймс Кэмерон.

0
16.11.2019, 20:31

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
Его до меня уже давно снял один чувак по имени Джеймс Кэмерон.
не по теме но кул, +1

0
16.11.2019, 20:32

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
не по теме но кул, +1
ну ты ж первый начал.

0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
16.11.2019, 20:34

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
ну ты ж первый начал.
я всегда говорю, что думаю, и это меня то же бесит как и твой аватар. он меня пугает и поэтому бесит

0
16.11.2019, 20:36

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
бесит как и твой аватар. он меня пугает и поэтому бесит
Значит он хорош!
https://coub.com/view/e7dqa

0
16.11.2019, 20:42

Не по теме:

Verevkin, ты понимаешь? что одно говно из другого говна только другое говно сделать сможет?

0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
16.11.2019, 20:47
constantin01, замените все знаки препинания пробелом, добавьте по пробелу в начале и в конце строки и находите:
C++
1
2
if (sentence.find(" "+word+" ") != string::npos)
return sentence.find(" "+word+" ");
0
28 / 23 / 12
Регистрация: 25.08.2013
Сообщений: 44
17.11.2019, 18:56
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <algorithm>
#include <iostream>
#include <regex>
#include <string>
 
auto main() -> int
{
  std::regex re{R"~((fish)(:?[^\w]+|$))~"}; // (:?[^\w]+|$) - список разделителей. все что не буква или конец строки.
 
  std::string str = "A fishman brought a fish. fish fishman fishers";
  std::sregex_iterator begin{std::begin( str ), std::end( str ), re}, end;
 
  std::for_each( begin, end, [begin = std::cbegin( str )]( const std::smatch & matches ) {
    const std::ssub_match & match = matches[1];
    std::cout << match << " " << "start pos: " << std::distance( begin, match.first )  << std::endl;
  } );
 
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2019, 18:56
Помогаю со студенческими работами здесь

Поиск слова в строке
Исходя из сабжа - тысячу раз разжеванная тема, но у меня немного другой вопрос. string surname; while (getline(f, S)){ if...

Поиск слова в строке
Всем привет! задача нужно найти слово в строке например: char str1=&quot;hello world&quot;; char str2=&quot;world&quot;; ...

Поиск слова в строке
Дано: массив типа char, заполняется с клавиатуры. Дана переменная

поиск слова в строке
Добрый день! Помогите найти ошибку. Задание длина файла 1000 символов (длина строки 70 символов). Данные из файла занести в структуру с...

Поиск слова в строке
if(name.Pos(&quot;Ïðîãðàììèðîâàíèå&quot;) == 1) price *= 2; если слово Программирование в начале строки то price *= 2 подскажите а как...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru