Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2010, 17:00   #1
Alex TGM
Пользователь
 
Регистрация: 25.04.2010
Сообщений: 10
По умолчанию

Привет всем. Надеюсь, мне кто нибудь поможет с несложной задачкой по информатике.
Как следует из названия мне необходимо сделать консольную программу, которая должна искать строку в текстовом файле, если строки нет, она должна дописывать её.
Со второй частью задачки я разобрался, а вот с поиском строки у меня возникла проблема.
Ниже привожу код, дописывающий строчку.
Код:
#include <iostream>
using namespace std;
#include <stdio.h>

void main( void ) 
{
FILE *file;
char *file_name = "file.txt";
char *load_string[50] = "none";

file = fopen(file_name, "a"); 
fputs("Строка", file);
fclose(file);
}
P.S. Я писал этот код в Visual Studio 2008.

Ну или расскажите мне о принципах работы функции fgets() и функции strstr().

Последний раз редактировалось Stilet; 26.04.2010 в 16:07.
Alex TGM вне форума Ответить с цитированием
Старый 26.04.2010, 15:56   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

fgets(); // Push me
- чтение из файла
strstr(); // Push me
- сравнение 2 строк
coNsept вне форума Ответить с цитированием
Старый 26.04.2010, 18:41   #3
Alex TGM
Пользователь
 
Регистрация: 25.04.2010
Сообщений: 10
По умолчанию

coNsept, то есть мне это не подходит
Alex TGM вне форума Ответить с цитированием
Старый 26.04.2010, 19:45   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
#include <stdio.h>
#include <string.h>
enum ERR{
	ERROIF=-1,
	ERROOF=-2
};
int main( void ) {
	FILE	*fo,*fi;
	const char	fileName[] = "in.txt";
	char *string=new char[255],
		 *string0=new char[255];
	strcpy(string,"find string");
	
	fi=fopen(fileName,"r");
	if(!fi)
		return ERROIF;
	while(!feof(fi)){
		fgets(string0,255,fi);
		if(!strcmp(string,string0))
			break;
	}
	fclose(fi);
	if(!strcmp(string,string0))
		return 0;
	
	fo = fopen(fileName, "a"); 
	if(!fi)
		return ERROOF;
	fputs("\n", fo);
	fputs(string, fo);
	fclose(fo);
	return 0;
}
rrrFer вне форума Ответить с цитированием
Старый 27.04.2010, 15:43   #5
Alex TGM
Пользователь
 
Регистрация: 25.04.2010
Сообщений: 10
По умолчанию

Спасибо! И, работает!
Alex TGM вне форума Ответить с цитированием
Старый 27.04.2010, 19:27   #6
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
std::string needString, string;
std::getline( std::cin, needString);
bool isHave = 0;
std::ifstream ifstream("filename");
while( std::getline( ifstream, string ) )
  if( string == needString ){
    isHave = 1;
    break;
  }
ifstream.close();
if( isHave )
  std::cout << "Есть такое\n";
else {
  std::ofstream ofstream("filename" );
  ofstream << needString << '\n';
  ofstream.close();
}
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 27.04.2010 в 22:52.
ozo вне форума Ответить с цитированием
Старый 27.04.2010, 19:51   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

ozo
переменные ifstream и ofstream возможно стоит переименовать и возможно есть смысл выйти из цикла если определил что строка входит в файл чтобы не просматривать файл до конца.
интересно почему просто cin, а не std::cin ?
rrrFer вне форума Ответить с цитированием
Старый 27.04.2010, 22:51   #8
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
ozo
переменные ifstream и ofstream возможно стоит переименовать и возможно есть смысл выйти из цикла если определил что строка входит в файл чтобы не просматривать файл до конца.
интересно почему просто cin, а не std::cin ?
Ну в принципе да, тут всё от компилятора зависит, про cin забыл
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск строки в файле Rekky PHP 24 10.12.2009 11:34
поиск строки в файле getUp Общие вопросы C/C++ 7 24.10.2009 23:19
поиск строки в файле по шаблону andru15 Общие вопросы C/C++ 1 16.02.2009 18:44
Поиск строки в текстовом файле Black_Ak24 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 24.01.2009 20:30
Поиск строки в файле Gwynbleidd Общие вопросы C/C++ 1 08.10.2008 01:45