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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
#1

Найти подстроку в строке. - C++

24.06.2012, 08:49. Просмотров 1085. Ответов 5
Метки нет (Все метки)

Как мне найти какую-то подстроку в строке? Я использую функцию strstr, но у меня ничего не получается. В файле такая строка: qwertyuiopasdfghjkl.

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
#include "stdafx.h"
#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{   setlocale(LC_ALL,"Russian"); 
    int x;
    ifstream infile; // входной поток
    infile.open("Text.txt");  // открываем файл
    char buffer[100]; 
    char str[10]; // вводим последовательность символов    
    cout << "Введите последовательность символов ( вводим на английском ) "; 
    cin >> str; 
        while(!infile.eof()) // считываем до конца файла 
        { 
            infile >> buffer; // считываем в буфер 
            if(strstr(str, buffer))  // сравниваем строки
            {
              cout << "Совпадение обнаружено " << buffer << endl; // совпадение обнаружено выходим из цикла                                
            } else
            { cout << "Совпадений нет"<< endl;}
        }
        
        system("Pause"); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2012, 08:49     Найти подстроку в строке.
Посмотрите здесь:

C++ наити подстроку в строке
C++ Как эффективно заменить подстроку в строке на другую подстроку?
C++ В строке с найти количество слов не содержащий подстроку
C++ Найти в строке подстроку от символа 'm' до 'n'
C++ Найти подстроку в строке
Найти данную подстроку в данной строке C++
Не могу понять ошибку "C2043: недопустимый break". Задача: найти подстроку в строке C++
В заданной строке найти наиболее длинную подстроку чередующихся цифр и букв C++
C++ Удалить в строке подстроку со словами, не оканчивающимися на -ок
C++ Найти подстроку в строке вручную, не используя strstr, s.find и т.д
Найти подстроку в строке без учета регистра C++
C++ Найти запись подстроку в строке в файле до символа "\n" и вернуть её оттуда

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
24.06.2012, 09:47     Найти подстроку в строке. #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include<cstring>
using std::strtok;
 
char *tokenPtr;
tokenPtr = strtok(str, " ");//находим первое слово в строке str
 
while ( tokenPtr != NULL ) 
{ 
//сравниваешь полученную строку
tokenPtr = strtok( NULL, " " ); // находим следующее слово,разделённое знаком пробела
}
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
24.06.2012, 10:06  [ТС]     Найти подстроку в строке. #3
Цитата Сообщение от alexey31415 Посмотреть сообщение
1
2
3
4
5
6
7
8
9
10
11 #include<cstring>
using std::strtok;
char *tokenPtr;
tokenPtr = strtok(str, " ");//находим первое слово в строке str
while ( tokenPtr != NULL )
{
//сравниваешь полученную строку
tokenPtr = strtok( NULL, " " ); // находим следующее слово,разделённое знаком пробела
}
Понимаете, в том то и суть задания, найти определённую последовательность символов в строке, которая не разделена пробелами. Например в строке qweadhjehvjerhveihie нужно найти последовательность erh.

Добавлено через 1 минуту
Цитата Сообщение от alexey31415 Посмотреть сообщение
#include<cstring>
using std::strtok;
char *tokenPtr;
tokenPtr = strtok(str, " ");//находим первое слово в строке str
while ( tokenPtr != NULL )
{
//сравниваешь полученную строку
tokenPtr = strtok( NULL, " " ); // находим следующее слово,разделённое знаком пробела
}
]

Понимаете, в том то и суть задания, найти определённую последовательность символов в строке, которая не разделена пробелами. Например в строке qweadhjehvjerhveihie нужно найти последовательность erh.
Catstail
Модератор
 Аватар для Catstail
21784 / 10508 / 1705
Регистрация: 12.02.2012
Сообщений: 17,512
24.06.2012, 10:12     Найти подстроку в строке. #4
Мне кажется, что strtok - немного не то, что нужно. Ведь в исходной строке пробелов (разделителей) может и не быть...

Добавлено через 6 минут
Выше уже указали причину: strstr возвращает указатель. Поэтому нужно писать:

C++
1
if(strstr(str, buffer) != NULL)
kazak
 Аватар для kazak
3030 / 2351 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
24.06.2012, 10:31     Найти подстроку в строке. #5
Цитата Сообщение от Catstail Посмотреть сообщение
Поэтому нужно писать:
У ТС также корректный вариант, только порядок аргументов у функции strstr - 1.строка для поиска, 2.искомая подстрока. У ТС же все наоборот.
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
24.06.2012, 10:41  [ТС]     Найти подстроку в строке. #6
Спасибо всем, всё работает!!!
Yandex
Объявления
24.06.2012, 10:41     Найти подстроку в строке.
Ответ Создать тему
Опции темы

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