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

Поиск подстроки в строке в файле - C++

Восстановить пароль Регистрация
 
_Vertigo_
13 / 13 / 2
Регистрация: 07.09.2013
Сообщений: 158
Завершенные тесты: 1
26.10.2013, 15:12     Поиск подстроки в строке в файле #1
Всем доброго времени суток. Суть задания в том, чтобы найти подстроку в строке в некотором файле. При успешном нахождении строки, в которой есть подстрока искомая, то вывести ее на экран(строку). Помогите найти ошибку в коде.
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
#include <iostream>
#include <fstream>
#include <string>
#define N  3000
#define M 100
using namespace std;
 
int main (){
    setlocale(LC_ALL, "Russian");
    char strl[N];
    char str[M];
    char * n;
    int k=0;
    FILE *F;
    F = fopen("D:\\Texts\\example1.txt","r");
 
    cin.getline(str, M);
    if (F==NULL) perror("Ошибка открытия файла");
    else { 
        while (!feof(F)){
             n = strpbrk((fgets(strl, N, F)), str);
             if (n!=NULL){ 
                 puts(strl);
                 k++;}
    }
    exit(0);
    if (k=0) cout << "No";
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 15:12     Поиск подстроки в строке в файле
Посмотрите здесь:

C++ Поиск подстроки в строке
C++ Поиск подстроки в файле
C++ Поиск подстроки в строке
Поиск подстроки в строке C++
C++ поиск подстроки в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
26.10.2013, 16:33     Поиск подстроки в строке в файле #2
Предлагаю другое, более лаконичное решение
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
#include <iostream>
#include <fstream>
#include <string>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string str, substr;
    std::ifstream inf;
    
    inf.open ( "Text.txt", std::ifstream::in );
    std::getline(std::cin, substr);
    //------------------------- 
    while (!inf.eof())
    {
        std::getline ( inf, str);
        if (str.find(substr) != std::string::npos)
            std::cout<<str<<std::endl;
    }
    //------------------------- 
    
    inf.close();
    
    std::system("pause");
    return 0;
}
_Vertigo_
13 / 13 / 2
Регистрация: 07.09.2013
Сообщений: 158
Завершенные тесты: 1
28.10.2013, 17:45  [ТС]     Поиск подстроки в строке в файле #3
metaluga145, в Вашем коде странная ошибка, а именно после ввода подстроки, которую нужно найти, консоль зависает.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
28.10.2013, 19:26     Поиск подстроки в строке в файле #4
_Vertigo_, странно, потому что у меня не зависает)
_Vertigo_
13 / 13 / 2
Регистрация: 07.09.2013
Сообщений: 158
Завершенные тесты: 1
28.10.2013, 20:29  [ТС]     Поиск подстроки в строке в файле #5
metaluga145, так же компилятор предупреждает о странной ескейп последовательности в строке 17. Такого я еще не видел))
А так, на вскидку, в моем коде ошибку видите?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
28.10.2013, 20:44     Поиск подстроки в строке в файле #6
Цитата Сообщение от _Vertigo_ Посмотреть сообщение
metaluga145, в Вашем коде странная ошибка, а именно после ввода подстроки, которую нужно найти, консоль зависает.
просто файл не находит. Необходимо добавить проверку, удалось ли создать объект ifstream
C++
1
if (!inf) return 1;
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
28.10.2013, 20:46     Поиск подстроки в строке в файле #7
_Vertigo_, не вижу, потому что там нахимичено очень много странных функций)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
28.10.2013, 20:47     Поиск подстроки в строке в файле #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{
    std::string line, substr;
    std::ifstream ifs("input.txt");
    if (!ifs) return 1;
 
    std::cin >> substr;
    while (std::getline(ifs, line))
        if (line.find(substr) != std::string::npos)
            std::cout << line << std::endl;
}
metaluga145
28.10.2013, 21:00
  #9

Не по теме:

MrGluck, а что вообще хранит ifstream? а то вызов if (!ifstream) какой-то не очевидный.суть вопроса:почему мы так можем делать?

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 00:18     Поиск подстроки в строке в файле
Еще ссылки по теме:

C++ Поиск подстроки в строке
C++ Поиск подстроки в строке
Поиск подстроки в строке C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
29.10.2013, 00:18     Поиск подстроки в строке в файле #10
Цитата Сообщение от metaluga145 Посмотреть сообщение
MrGluck, а что вообще хранит ifstream? а то вызов if (!ifstream) какой-то не очевидный.суть вопроса:почему мы так можем делать?
Потому что у него перегружена версия оператора! который
возвращает истину, если установлены флаги ошибок потока
http://www.cplusplus.com/reference/i.../operator_not/
Yandex
Объявления
29.10.2013, 00:18     Поиск подстроки в строке в файле
Ответ Создать тему
Опции темы

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