Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Kirill Losev
3 / 3 / 0
Регистрация: 01.10.2011
Сообщений: 249
#1

как осуществить в строковом массиве поиск именно слова(!), а не..... - C++

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

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

Заранее всем спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
19.03.2012, 01:48     как осуществить в строковом массиве поиск именно слова(!), а не..... #2
strcmp + strtok
Kirill Losev
3 / 3 / 0
Регистрация: 01.10.2011
Сообщений: 249
25.03.2012, 03:10  [ТС]     как осуществить в строковом массиве поиск именно слова(!), а не..... #3
Цитата Сообщение от R136a1 Посмотреть сообщение
strcmp + strtok
R136a1, если Вас не затруднит, не могли бы Вы, пожалуйста, поподробнее объяснить суть идеи
Duha666
50 / 50 / 5
Регистрация: 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");
MrCold
852 / 750 / 71
Регистрация: 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 ";  }
 
}
Kirill Losev
3 / 3 / 0
Регистрация: 01.10.2011
Сообщений: 249
25.03.2012, 09:48  [ТС]     как осуществить в строковом массиве поиск именно слова(!), а не..... #6
Duha666,
MrCold,
спасибо огромное!
Kirill Losev
3 / 3 / 0
Регистрация: 01.10.2011
Сообщений: 249
02.04.2012, 10:55  [ТС]     как осуществить в строковом массиве поиск именно слова(!), а не..... #7
MrCold, можешь поподробнее объяснить принцип работы программы, пожалуйста?
MrCold
852 / 750 / 71
Регистрация: 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 ";  }
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2012, 12:11     как осуществить в строковом массиве поиск именно слова(!), а не.....
Еще ссылки по теме:

C++ Подскажите ,как осуществить поиск максимального элемента массива
C++ Как осуществить поиск по элементам множества?
C++ Хранение большого (15000) количества строк в строковом массиве
Поиск и вствка слова в массиве C++
C++ Как можно осуществить замену слова в строке? (например, дом на мир и обратно)

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

Или воспользуйтесь поиском по форуму:
Kirill Losev
3 / 3 / 0
Регистрация: 01.10.2011
Сообщений: 249
02.04.2012, 12:11  [ТС]     как осуществить в строковом массиве поиск именно слова(!), а не..... #9
MrCold, спасибо. Теперь уж точно разобрался
Yandex
Объявления
02.04.2012, 12:11     как осуществить в строковом массиве поиск именно слова(!), а не.....
Ответ Создать тему
Опции темы

Текущее время: 01:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru