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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2009, 11:10   #1
Maqvaer
Новичок
Джуниор
 
Регистрация: 23.10.2009
Сообщений: 4
Вопрос сравнение слов в файлах

Здравствуйте!
Такое дело: надо проверить наличие слова из одного txt файла("наречия.txt") в другом txt файле(словарь.txt). И, если есть, записать в третий файл ("слова_в_словаре.txt")с добавоением знака "+". Проблема заключается в том, что в файле "наречия" слова представлены в виде списка, где в каждой строке по одному слову. Например, информационност информационщик
информаш
....
А в словаре слова преставлены следующим образом:
информационност 75 68 397 Фг -
информационщик 11 7 36 Фб - 22
информаш 2805 61 36 Фг - 29
информбюро 29 20 31 Фа - 8
..........
Для извлечения слов из файлов пользуюсь функцией fgets (word,' ', file_from); где значение 'пробел' не подходит для правильной работы программы .

Вот сам код, может там ещё "кривенько":
Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <io.h>
#include <stdlib.h>
#include <windows.h>
#include <windowsx.h>
#include <direct.h>
#include <mmsystem.h>
#include <math.h>
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
 
{

FILE *file_from;
FILE *file_in;
FILE *file_to;

char* file_words = "наречия.txt";
char* file_vocab = "словарь.txt";
char* file_word_in_vocab = "слова_в_словаре.txt";


    file_from = fopen( file_words, "r+" );//файл где слова для сверки(наречия)


 file_to=fopen (file_word_in_vocab, "w");//файл с результатом работы 

char  word_name[2256];
char word[2256];	
while (!feof(file_from))
	
{     
	 fgets (word,' ', file_from);
	
	 file_in=fopen(file_vocab,"r"); //файл словаря

		while(feof(file_in)==NULL)
		{
			
				fgets (word_name,' ', file_in);
				if ((strcmp(word,word_name)==NULL))

           {   
			   fputs("+", file_to);
		        fputs(word, file_to);
              }
		
			      
		}
		fclose(file_in);
}		
 fclose( file_to); 
 fclose( file_from);
 }

Последний раз редактировалось Stilet; 23.10.2009 в 11:48.
Maqvaer вне форума Ответить с цитированием
Старый 23.10.2009, 11:42   #2
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <io.h>
#include <stdlib.h>
#include <windows.h>
#include <windowsx.h>
#include <direct.h>
#include <mmsystem.h>
#include <math.h>
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
о_0 Это что?!

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

Примерно так:

Код:
#include <iostream>
#include <fstream>
#include <stdio.h>

int main(void)

{

FILE *file_from;
FILE *file_in;
FILE *file_to;

char* file_words = "1.txt";
char* file_vocab = "2.txt";
char* file_word_in_vocab = "3.txt";


if(!(file_from = fopen( file_words, "r+" )))//файл где слова для сверки(наречия)
{
	printf("File %s not found", file_words);
	return 0;
}

if(!(file_in=fopen(file_vocab,"r"))) //файл словаря
{
	printf("File %s not found", file_vocab);
	return 0;
}

char word_name[2256];
char word[2256];
while (!feof(file_from))
{
fgets (word,' ', file_from);

while(feof(file_in)==NULL)
{

fgets (word_name,' ', file_in);	

int i=0;
char temp[2256]= "";

while(word_name[i]!=' ')
{
	temp[i] = word_name[i];
	i++;
}

if (strcmp(word,temp)==0)
{
	if(!(file_to=fopen (file_word_in_vocab, "w")))//файл с результатом работы
	{
		printf("File %s not found", file_word_in_vocab);
		return 0;
	}
	fputs("+", file_to);
	fputs(word, file_to);
	fclose( file_to);
}
}
fclose(file_in);
}

fclose( file_from);
return 0;
}
И обязательно проверять успешность открытия файлов!

И еще. лучше избегать названий файлов на кирилице.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 23.10.2009, 13:18   #3
Maqvaer
Новичок
Джуниор
 
Регистрация: 23.10.2009
Сообщений: 4
По умолчанию

спасибо большое, названия теперь на латинице, на код не срабатывает почему-то, даже новый файл не создается, консольное приложение очень долго работает...а можно сделать так, чтобы во временный массив забивались значение один раз? а не каждый при обнаружении нового слова в словаре?

Последний раз редактировалось Maqvaer; 23.10.2009 в 13:24.
Maqvaer вне форума Ответить с цитированием
Старый 23.10.2009, 13:21   #4
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Новый файл создается, только если во втором файле содержатся слова из первого файла. Иначе смысла нет создавать файл.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 23.10.2009, 13:34   #5
Maqvaer
Новичок
Джуниор
 
Регистрация: 23.10.2009
Сообщений: 4
По умолчанию

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

Последний раз редактировалось Maqvaer; 23.10.2009 в 13:46.
Maqvaer вне форума Ответить с цитированием
Старый 23.10.2009, 13:45   #6
Maqvaer
Новичок
Джуниор
 
Регистрация: 23.10.2009
Сообщений: 4
По умолчанию

у вас эта программа ищет нормально? только первое слово из "наречия.txt" проверяет-дальше не идет, по-моему.
Maqvaer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
Константы в заголовочных файлах. jojahti Общие вопросы C/C++ 13 27.08.2009 16:03
C# сравнение слов Bobrik Помощь студентам 4 18.05.2009 17:57
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19
Помогите с вопросами о файлах Дима82 Помощь студентам 5 26.05.2008 19:49