Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 249
1

Как осуществить в строковом массиве поиск именно слова, а не части слова?

19.03.2012, 01:27. Просмотров 2344. Ответов 8
Метки нет (Все метки)

как осуществить в строковом массиве поиск именно слова(!), а не части слова.
Допустим, есть строка: "this is horosho"
Если я использую функцию strstr( , ); то у меня сначала программа ищет часть слова "this", а потом отдельное слово "is".
Как исправить это?

Заранее всем спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2012, 01:27
Ответы с готовыми решениями:

Найти слова, в которых символ в центре слова и в оставшейся части встречается только один раз
Задание: Слово имеет нечетное количество символов, и символ, находящийся в центре слова, в...

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

Поиск по части слова
Здравствуйте, не могу найти решение. Как сделать поиск по части слова в файле. Например есть логин...

Поиск по части слова
Доброго времени суток! На сайте существует функционал поиска. Поиск происходит только с числовыми...

8
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
19.03.2012, 01:48 2
strcmp + strtok
1
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 249
25.03.2012, 03:10  [ТС] 3
Цитата Сообщение от R136a1 Посмотреть сообщение
strcmp + strtok
R136a1, если Вас не затруднит, не могли бы Вы, пожалуйста, поподробнее объяснить суть идеи
0
52 / 52 / 19
Регистрация: 10.03.2012
Сообщений: 138
25.03.2012, 05:29 4
Разбиваем полную строку на отдельные слова и каждое слово сравниваем с вашим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool found = false; // нашли ли мы слово
pch = strtok (str," ,.-"); // str - ваша строка, " ,.-" - разделители слов. Наверное, стоит ещё добавить всякие !? и так далее
while (pch != NULL)
{
    if (strcmp(pch, yourword) == 0) // yourword - искомое слово
        found = true;
    pch = strtok (NULL, " ,.-");
}
if (found)
    printf("Found");
else
    printf("Not found");
1
866 / 764 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
25.03.2012, 07:15 5
Без strtok можно :
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
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <cstring>
using namespace std;
 
int main(){
       char word[] = "first";  //   СЛОВО ДЛЯ ПОИСКА 
       char copyword[20] = "";
       
       size_t i = 0;
       size_t j = 0;
       size_t k = 0;
       size_t pos[20] = {0};
 
       //   СТРОКА ДЛЯ ПОИСКА 
       char string[] = "On the first call to strtok,returns a pointer to the first token in strToken";
 
while(string[i]){
 
 
        if(isalpha(string[i]))
 
            copyword[j++] = string[i];
 
        if(isalpha(string[i])&& !isalpha(string[i + 1])) { 
 
                          copyword[j] = '\0'; 
        
                   if(!strcmp(copyword,word)) {
 
                   pos[k++] = i - (strlen(copyword)) + 2; }
 
                   copyword[0] = '\0';j = 0;}
    i++;
}
 
        if(!pos) cout <<"Not found";
 
        else  { cout << "Found in " ;
 
           for(i = 0; i < k;i++)
 
                   cout    <<  pos[i] << "  ";
 
                   cout << " positions ";  }
 
}
1
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 249
25.03.2012, 09:48  [ТС] 6
Duha666,
MrCold,
спасибо огромное!
0
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 249
02.04.2012, 10:55  [ТС] 7
MrCold, можешь поподробнее объяснить принцип работы программы, пожалуйста?
0
866 / 764 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
02.04.2012, 12:02 8
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <cstring>
using namespace std;
 
int main(){
       char word[] = "first";  //   СЛОВО ДЛЯ ПОИСКА
       char copyword[20] = "";  //  СЮДА БУДЕМ КОПИРОВАТЬ СЛОВО 
       
       size_t i = 0;   // СЧЕТЧИК ОБЩИЙ ДЛЯ СТРОКИ 
       size_t j = 0;   // СЧЕТЧИК КОПИИ СЛОВА 
       size_t k = 0;    // СЧЕТЧИК  НАЙДЕННЫХ СЛОВ 
       size_t pos[20] = {0}; // МАССИВ ПОЗИЦИИ  НАЙДЕННЫХ СЛОВ 
 
       //   СТРОКА ДЛЯ ПОИСКА
             char string[] = "On the first call to strtok,returns a pointer to the first token in strToken";
 
while(string[i]){    // ПОКА НЕ КОНЧИТСЯ СТРОКА
 
 
        if(isalpha(string[i]))  // ЕСЛИ  СИМВОЛ СТРОКИ  БУКВА 
 
            copyword[j++] = string[i];  // НАЧИНАЕМ КОПИРОВАТЬ СЛОВО
 
        if(isalpha(string[i])&& !isalpha(string[i + 1])) {  // ЕСЛИ КОНЕЦ СЛОВА В СТРОКЕ
 
                          copyword[j] = '\0';     // ОБОЗНАЧИМ КОНЕЦ  КОПИИ СЛОВА 
       
                   if(!strcmp(copyword,word)) {    // ТЕПЕРЬ СРАВНИМ КОПИЮ СЛОВА СО СЛОВОМ ДЛЯ ПОИСКА
 
                    // ОТМЕЧАЕМ ПОЗИЦИЮ НАЙДЕННОГО СЛОВО  ПО ПЕРВОЙ БУКВЕ
                        pos[k++] = i - (strlen(copyword)) + 2; } // ЗАНОСИМ В МАССИВ ПОЗИЦИЙ 
 
                   copyword[0] = '\0';      // ЗДЕСЬ ОБНУЛИМ КОПИЮ СЛОВА 
 
                   j = 0;}    // ЗДЕСЬ ОБНУЛИМ СЧЕТЧИК БУКВ КОПИИ СЛОВА
    i++;    
}
 
        if(!pos) cout <<"Not found";    // ЕСЛИ НИЧЕГО НЕ ОТМЕТИЛОСЬ  ВЫВОД "НЕ НАЙДЕНО"
 
         // ЕСЛИ СЛОВА БЫЛИ ВЫВОДИМ ВСЕ ПОЗИЦИИ 
         else  { cout << "Found in " ;
 
           for(i = 0; i < k;i++)
 
                   cout    <<  pos[i] << "  "; 
 
                   cout << " positions ";  }
 
}
1
3 / 3 / 2
Регистрация: 01.10.2011
Сообщений: 249
02.04.2012, 12:11  [ТС] 9
MrCold, спасибо. Теперь уж точно разобрался
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2012, 12:11

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

Поиск по части слова
Как сделать поиск по части слова? Необходимая часть вводится в текстовое поле, а слова, которые...

Поиск в ячейках по части слова
Всем доброго времени суток есть макрос(точнее его часть которую я бы хотел изменить:) pomenat...

Запрос на поиск части слова
У меня есть такой запрос: $query = 'SELECT * FROM `dbhv` WHERE `name` LIKE &quot;'.$name.'&quot;'; Но я...

VBA for Access. Поиск по части слова
Как сделать поиск по части слова? Необходимая часть вводится в текстовое поле, а слова, которые...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.