Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
tinyvasily
0 / 0 / 0
Регистрация: 23.09.2015
Сообщений: 72
1

Как найти текст в файле и возвратить 0 или 1 в зависимости от того,найдено или нет?

28.09.2015, 15:49. Просмотров 380. Ответов 18
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool fnd(char* fn,string stf)
{
string s;
ifstream ifs(fn);
while (!ifs.eof())
{
getline(ifs,s);
if(s.find(stf,0)!=string::npos)
{
ifs.close();
return 1;
}
}
ifs.close();
return 0;
}
Что не так тут?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2015, 15:49
Ответы с готовыми решениями:

Вывести True или False в зависимости от того, имеют три заданных целых числа одинаковую четность или нет
Всем привет! Помогите, пожалуйста в решении задачи. Знаю, что задачи...

Составить программу, печатающую ДА или НЕТ в зависимости от того, имеют ли три целых введенных числа одинаковую четность
Составить программу, печатающую ДА или НЕТ в зависимости от того, имеют ли три...

Ввести x,y и в зависимости от того что введено - вывести 0 , 1 , или 2
Помогите сделать задачку...в зависимости какой будет х и y выводится на екран...

Дан текст. Найти слово встречающееся в каждом предложении или сообщить что такого слова нет
Дан текст. Найти слово встречающееся в каждом предложении или сообщить что...

Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр дробной части заданного положительного вещественного числа цифра ноль
Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр...

18
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 16:51 2
Я так полагаю, не так кодировка. Английский текст ищется? Ну и по мелочи:
1) Нужно true и false вместо 1 и 0.
2) ifs.close не нужен - само закроется при разрушении объекта.
3) const char* fn, const string&stf.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
28.09.2015, 16:57 3
Цитата Сообщение от Renji Посмотреть сообщение
ifs.close не нужен
че это?

вот так может и не нужен
C++
1
2
3
4
5
6
int main(){
   {
     ifstream ifs(fn);
     ...
   }
}
А вот так нужен
C++
1
2
3
4
5
6
int main(){
   
     ifstream ifs(fn);
     ...
     ifs.close();
}
0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 17:00 4
Цитата Сообщение от daslex Посмотреть сообщение
че это?
То это, что он автоматически вызывается из деструктора std::filebuf, лежащего в потрохах std::ifstream.
0
daslex
28.09.2015, 17:05
  #5

Не по теме:

Это из той же области, где очистка памяти у new перед return от int main(). Деструкторы при выходе почистят.

0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 17:12 6
Цитата Сообщение от daslex Посмотреть сообщение

Не по теме:

Это из той же области, где очистка памяти у new перед return. Деструкторы при выходе почистят.

Не по теме:

По-моему, кому-то надо подучить понятие деструктора, потому как new никакого отношения к деструкторам не имеет. И да, память тоже можно не чистить руками, если выделять ее через std::unique_ptr<int[]>data(new int[100500]);

0
ForEveR
В астрале
Эксперт С++
7997 / 4755 / 652
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
28.09.2015, 17:12 7
daslex, Это далеко не то же самое.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
28.09.2015, 17:24 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
#include <iostream>
#include <fstream>
 
using namespace std;
 
 
int main()
{
   ifstream ifs("D:\\in.txt",ios::in);
   string S;
 
   while (ifs){
    getline(ifs,S);
    cout<<S;
   }
  //ifs.close();
 
   ifs.open("D:\\in.txt",ios::in);
   while (ifs){
    getline(ifs,S);
    cout<<S;
   }
   ifs.close();
}
0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 17:27 9
Цитата Сообщение от daslex Посмотреть сообщение
ifs.open("D:\\in.txt",ios::in);
ifs.seekg(0) и никаких close/open не нужно. Если нужно дважды использовать поток для разных файлов, это уже совсем другая песня.
0
tinyvasily
0 / 0 / 0
Регистрация: 23.09.2015
Сообщений: 72
28.09.2015, 17:28  [ТС] 10
Цитата Сообщение от Renji Посмотреть сообщение
Я так полагаю, не так кодировка. Английский текст ищется? Ну и по мелочи:
1) Нужно true и false вместо 1 и 0.
2) ifs.close не нужен - само закроется при разрушении объекта.
3) const char* fn, const string&stf.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int fnd_num(char* fn,string stf)
{
int found=0;
string s;
ifstream ifs(fn);
while (!ifs.eof())
{
getline(ifs,s);
if(s.find(stf,0)!=-1) found++;
}
ifs.close();
return found;
}
всё работает.Теперь и число нахождений показывает!
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
28.09.2015, 17:29 11
Цитата Сообщение от Renji Посмотреть сообщение
ifs.seekg(0)
ну ну
0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 17:32 12
Цитата Сообщение от daslex Посмотреть сообщение
ну ну
Да, пардон, ifs.clear() забыл. Хотя, в C++11 должно само eof сбрасывать.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
28.09.2015, 17:35 13

Не по теме:

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



Добавлено через 1 минуту

Не по теме:

У меня компилируется с галочкой С++17. не сбрасывает. Хотя не знаю. И 1 строчка как бы не 2.



Добавлено через 1 минуту

Не по теме:

ifs.clear();
ifs.seekg(0);

не даст эффекта ifs.close()

0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 17:46 14
Цитата Сообщение от daslex Посмотреть сообщение

Не по теме:

не даст эффекта ifs.close()

Не по теме:

Даст эффект reopen (close+open).


Цитата Сообщение от daslex Посмотреть сообщение

Не по теме:

У меня компилируется с галочкой С++17. не сбрасывает. Хотя не знаю. И 1 строчка как бы не 2.

Не по теме:

Кривая галочка? "The function clears the eofbit flag, if set before the call." (c) www.cplusplus.com.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<fstream>
 
using namespace std;
int main()
{
    ofstream("test.txt")<<"test";
 
    string test;
    ifstream stream("test.txt");
    while(!stream.eof())
        getline(stream,test);
    test="";
 
    stream.seekg(0);
    cout<<stream.eof()<<endl;
    getline(stream,test);
    cout<<test<<endl;
    return 0;
}
0
daslex
28.09.2015, 17:55
  #15

Не по теме:

не,
вот так нет эффекта
while(stream)

вот так есть эффект
while(!stream.eof())

а с ifs.close() и так и так работает.
____________
ну кто знает насколько кривая -std=c++17 сегодня в gcc 5.1.0

0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 18:04 16
Цитата Сообщение от daslex Посмотреть сообщение

Не по теме:

вот так нет эффекта

Не по теме:

Так оно пингует fail и bad, а не eof. Проще говоря, наличие сбоя при чтении.

1
daslex
28.09.2015, 18:08
  #17

Не по теме:

Ну а какой сбой может быть в файле открытом как текстовый? Чтобы или bad или fail словить. При условии, что файл существует. Просто интересно.

0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
28.09.2015, 18:14 18
Цитата Сообщение от daslex Посмотреть сообщение

Не по теме:

Ну а какой сбой может быть в файле открытом как текстовый? Чтобы или bad или fail словить. Просто интересно.

Не по теме:

Чтение из файла, который уже eof. "Notice that some eofbit cases will also set failbit." (c) cplusplus.com

1
elrond
5 / 5 / 3
Регистрация: 03.11.2015
Сообщений: 30
03.11.2015, 21:13 19
Подскажите плз, поиск символа в открытом текстовом файле. Что то никак не могу разобраться. На примере
Цитата Сообщение от daslex Посмотреть сообщение
C++

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream ifs("D:\\in.txt",ios::in);
string S;
while (ifs){
getline(ifs,S);
cout<<S;
}
//ifs.close();
ifs.open("D:\\in.txt",ios::in);
while (ifs){
getline(ifs,S);
cout<<S;
}
ifs.close();
}
Добавлено через 44 секунды
Для VS2008

Добавлено через 2 минуты
Цитата Сообщение от tinyvasily Посмотреть сообщение
int fnd_num(char* fn,string stf) { int found=0; string s; ifstream ifs(fn); while (!ifs.eof()) { getline(ifs,s); if(s.find(stf,0)!=-1) found++; } ifs.close(); return found; }
А вот этот код не работает у меня вообще(
0
03.11.2015, 21:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 21:13

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

Проверить, правильно ли в текст входят круглые скобки. Ответ ДА или НЕТ с++
Помогите написать задачку по с++ &quot;Проверить, правильно ли в текст входят...

В txt-файле найти заданное слово или фразу и поменять её на другое слово или фразу
Привет народ! Помогите чем сможете. Короче нужна программа, которая в txt-файле...


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

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

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