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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2010, 15:26   #1
Crab2
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 19
По умолчанию Файлы. Стиль С

Вот решил начать учиться с файлами, т.к. придётся в ближайшее время создавать БД текстовое, вот собсно задача:
Пользователь вводит слово. Строчки, которые начинаются с этого слова, нужно вывести на экран. Вроде бы не трудно, а вроде столько косяков наделал что уже и не знаю, что делать...
Код:
#include <cstdlib>
#include <cstdio>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
    FILE *work;
    int position = 0, position2 = 0,str, google,i=0 ;
    char c, word[1024], write, word2[1024];

    printf("write a word");
    cin.get(word,1024);
    str = strlen(word);

    work = fopen("workout.txt","r");
    do
    {
        google=0;
        do
        {
            c = fgetc (work);
            position++;//как вообще позиция так работает, что позиция файла именно на него обращается?
            printf("%c",c);
            google++;
            i++;
            word[i] = c;

        }
        while(c!=' ');

       if(word2==word)
       {
            position2 = position - google;
            do
            {
                position2++;
                write = fgetc(work);
                printf("%c",word);
            }
            while(write!='\0');
            printf("\n");
       }

   }
   while(c != EOF);

    return 0;
Все и сразу-мечта идиота
Crab2 вне форума Ответить с цитированием
Старый 20.04.2010, 16:25   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Ну самый простой вариант может быть, например, такой:

Код:
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int main()
{
	string 		keyWord;		//слово для поиска
	string		fileLine;		//строка, считанная из файла
	ifstream	dataBaseFile;		//файл базы данных

	dataBaseFile.open("workout.txt");	//пробуем открыть файл

	if (!dataBaseFile.is_open()) {		//если не удалось - сообщаем об ошибке и выходим
		cout << "Ошибка! Не удалось открыть файл базы данных!" << endl;	
		return 1;
	}

	cout << "Введите слово для поиска: " << endl;	//просим ввести слово для поиска

	cin >> keyWord;		//считываем слово

	transform(keyWord.begin(), keyWord.end(), keyWord.begin(), ::toupper);	//приводим к верхнему регистру

	while (!dataBaseFile.eof()) {		//читаем файл до конца
		getline(dataBaseFile, fileLine);
		transform(fileLine.begin(), fileLine.end(), fileLine.begin(), ::toupper);	//приводим к верхнему регистру строку, считанную из файла
		if (!fileLine.find(keyWord.c_str(), 0, keyWord.size())) {	//ищем строку, начало которой совпадает с введеным словом
			cout << fileLine << endl;
		}
	}
	
	dataBaseFile.close();	//закрываем файл

	return 0;
}
oleg kutkov вне форума Ответить с цитированием
Старый 20.04.2010, 16:25   #3
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Ну самый простой вариант может быть, например, такой:

Код:
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int main()
{
	string 		keyWord;		//слово для поиска
	string		fileLine;		//строка, считанная из файла
	ifstream	dataBaseFile;		//файл базы данных

	dataBaseFile.open("workout.txt");	//пробуем открыть файл

	if (!dataBaseFile.is_open()) {		//если не удалось - сообщаем об ошибке и выходим
		cout << "Ошибка! Не удалось открыть файл базы данных!" << endl;	
		return 1;
	}

	cout << "Введите слово для поиска: " << endl;	//просим ввести слово для поиска

	cin >> keyWord;		//считываем слово

	transform(keyWord.begin(), keyWord.end(), keyWord.begin(), ::toupper);	//приводим к верхнему регистру

	while (!dataBaseFile.eof()) {		//читаем файл до конца
		getline(dataBaseFile, fileLine);
		transform(fileLine.begin(), fileLine.end(), fileLine.begin(), ::toupper);	//приводим к верхнему регистру строку, считанную из файла
		if (!fileLine.find(keyWord.c_str(), 0, keyWord.size())) {	//ищем строку, начало которой совпадает с введеным словом
			cout << fileLine << endl;
		}
	}
	
	dataBaseFile.close();	//закрываем файл

	return 0;
}
oleg kutkov вне форума Ответить с цитированием
Старый 20.04.2010, 16:26   #4
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Модераторы, удалите, пожалуйста, задвоившийся пост.
oleg kutkov вне форума Ответить с цитированием
Старый 20.04.2010, 16:56   #5
Crab2
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 19
По умолчанию

А есть мануал по этим функцияМ? а то я совершенно другое видел
Все и сразу-мечта идиота
Crab2 вне форума Ответить с цитированием
Старый 20.04.2010, 17:47   #6
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

По каким именно функциям ? Все это стандартные методы чистого С++ и std библиотеки, материалов по ним море (интернет, книги).
А ваш пример был написан на смеси С и С++.
oleg kutkov вне форума Ответить с цитированием
Старый 21.04.2010, 00:15   #7
silent_1991
Пользователь
 
Регистрация: 06.11.2009
Сообщений: 68
По умолчанию

Если надо, вот чистый Си

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fin;
    
    if ((fin = fopen("files.in", "r")) == NULL)
    {
        printf("Oshibka otkritiya faila!");
        getch();
        return -1;
    }
    
    char word[80];
    char buffer[1024];
    int i;
    int len;
    int key;
    
    printf("Vvedite slovo: ");
    gets(word);
    len = strlen(word);
    
    while (!feof(fin))
    {
        fgets(buffer, 1024, fin);
        
        key = 0;
        
        for (i = 0; i < len; i++)
        {
            if (buffer[i] != word[i])
            {
                key = 1;
                break;
            }
        }
        
        if (key == 0)
        {
            if ((buffer[i] == ' ') || (buffer[i] == '\n'))
            {
                printf("%s", buffer);
            }
        }
    }
    
    fclose(fin);
    
    getch();
    return 0;
}
silent_1991 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стиль MDIChild Dr.Badnezz Общие вопросы Delphi 0 05.04.2010 16:54
Стиль Windows7 Бутаков_Сергей Общие вопросы Delphi 6 04.04.2010 18:52
Стиль программирования на С/С++ AddisAbeba Общие вопросы C/C++ 36 27.12.2008 00:48