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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Maqvaer
3 / 3 / 0
Регистрация: 23.10.2009
Сообщений: 25
#1

Cравнение слов в файлах. - C++

23.10.2009, 15:37. Просмотров 637. Ответов 6
Метки нет (Все метки)

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

Вот сам код, может там ещё "кривенько":



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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
 
int main(void)
 
{
 
FILE *file_from;
FILE *file_in;
FILE *file_to;
 
char* file_words = "наречия.txt";
char* file_vocab = "словарь.txt";
char* file_word_in_vocab = "слова_в_словаре.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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2009, 15:37     Cравнение слов в файлах.
Посмотрите здесь:

Поиск слов в файлах - C++
Здравствуйте, у меня такая задача: в нескольких файлах (объем в совокупности от 10 до 15 гб) надо найти примерно 1000-1500 &quot;слов&quot;...

Поиск одинаковых слов в текстовых файлах - C++
помогите пожалуйста...C++ написать прогу которая 2 txt файла сравнивает на одинаковые слова и выводит их в qlistwidget или хотябы в 3...

Вывод слов на экран, которые появляются в обоих файлах в отсортированном порядке - C++
Написать программу на С++, которая считывает два имени файла с клавиатуры и выводит на экран слова, которые появляются в обоих файлах в...

Подсчитать и вывести на экран число слов в ней, а затем и каждое отдельное слов - C++
Помогите с кодом: Введите с клавиатуры строку символов, после чего подсчитайте и выведите на экран число слов в ней, а затем и каждое...

В массиве слов найти пару слов, из которых одно является обращением другого - C++
Дали задачку, вроде простая, а мыслей нет(( вопрос как организовать поиск слов)) ну собственно задание: В массиве слов найти пару...

Найти слова которые могут быть полностью сложены из других слов,сцепление слов(конкатенация) - C++
найти слова которые могут быть полностью сложены из других слов,сцепление слов(конкатенация)

Задача по файлах - C++
Створіть текстовий файл, що містить номери рейсів літаків і дні тижня, в які виконуються дані рейси (числа від 1 до 7). Напишіть програму,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.10.2009, 13:06     Cравнение слов в файлах. #2
дело не в пробеле, много ошибок

например, файл результатов каждый раз перезатирается
для слова огромный буфер создаётся на каждом витке цикла (надо или меньше или вынести)
fgets принимает пробел на месте, где должен стоять размер, ну, он сработает по совпадению и будет читать по 31 символу
printf'ы без перевода строки
простой C, а юзаются заголовки iostream и fstream (в stdio.h описаны и printf, и FILE)
юзается strcmp, а заголовка string.h нет

ещё там есть, типа file_words зачем-то открывается ещё и для записи - r+

Добавлено через 5 минут
C
1
    while(feof(file_in)==NULL)
условие юзает нулевой указатель, надо число ноль
да и сделано по пхпшному

C
1
2
    while((fgets (word_name, sizeof word_name, file_in)))
        ;
Maqvaer
3 / 3 / 0
Регистрация: 23.10.2009
Сообщений: 25
26.10.2009, 10:36  [ТС]     Cравнение слов в файлах. #3
Спасибо огромное! Вроде все о чем писали подправила: строки сраниваются все, но к сожалению не так,как хотелось бы. Если сранивать формат слово - слово - работает иделаьно, а если слово - слово со значками - не отыскивает совпадение. То есть, в словаре слово записано например
информационност 75 68 397 Фг -
а сравнивается оно со словом информационност.И, соответственно не находится . Хотя,когда извлекаю слово из "словарь.txt" (word_name) в gets задаю размер слова из "наречия.txt", то есть слова без этих значков(word). Вот подправленный код :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdio.h>
 
int main(void)
 
{
 
FILE *file_from;
FILE *file_in;
FILE *file_to;
 
char* file_words = "наречия.txt";
char* file_vocab = "словарь.txt";
char* file_word_in_vocab = "слова_в_словаре.txt";
 
 
if(!(file_from = fopen( file_words, "r" )))//файл где слова для сверки(наречия)
{
    printf("File %s not found\n", file_words);
    return 0;
}
 
if(!(file_to=fopen (file_word_in_vocab, "w")))//файл с результатом работы
    {
        printf("File %s not found\n", file_word_in_vocab);
        return 0;
    }
 
char word_name[23];
char word[23];
 
while(fgets (word,sizeof word, file_from))
{
 
if(!(file_in=fopen(file_vocab,"r"))) //файл словаря
{
    printf("File %s not found\n", file_vocab);
    return 0;
}
while(fgets (word_name,sizeof word, file_in))
 {
    
int i=0;
char temp[226]= "";
 
while(word_name[i]!=' ')
{
    temp[i] = word_name[i];
    i++;
}
 
if (strcmp(word,temp)==0)
{
    fputs("+", file_to);
    fputs(word, file_to);
    
}
}
fclose(file_in);
}
fclose( file_to);
fclose( file_from);
return 0;
}
хэлп ми, плиз
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.10.2009, 03:24     Cравнение слов в файлах. #4
два раза stdio.h
открытие файла вынести из цикла
если файл при открытии для записи дал NULL, это значит его невозможно создать, а не найти
при ошибке программа должна возвращать не ноль, так как ноль общепринят как успех (ошибки можно нумеровать, чтобы было понятно где конкретно программа вышла)

Код
информационност 75 68 397 Фг -
информационност.
C
1
2
3
4
5
    char temp[100];
 
    sscanf(longword, "%99[^ ]", temp);
    if (!strncmp(shortword, temp, strlen(temp)))
        fprintf(file_to, "+%s" "\n", temp);
это когда там точка есть, но лучше, конечно, без точки сравнивать (то есть почистить слово до сравнения, прямо на этапе считывания)
Maqvaer
3 / 3 / 0
Регистрация: 23.10.2009
Сообщений: 25
27.10.2009, 10:02  [ТС]     Cравнение слов в файлах. #5
спасибо большущее!! Все поняла, подправила. Только такая фишечка: если вынести за цикл открытие файла, ну и закрытие получается - программа сравнивет только первое слово из "наречия.txt". Вот такие пироги
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.10.2009, 10:25     Cравнение слов в файлах. #6
есть rewind(FILE *)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2009, 11:51     Cравнение слов в файлах.
Еще ссылки по теме:

Мусор в файлах - C++
В файлы попадает какой-то мусор, в чём ошибка? #include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include &lt;string.h&gt; #include...

Строки в файлах - C++
Здравствуйте. Такой вопрос. Как мне из файла считывать каждую 3 строку, преобразовывать ее в тип int и запоминать. Заранее известно, что...

Матрицы в файлах - C++
Добрый день! Изучаю дальше файлы, и есть парочка задач, но в них уже идёт работа с матрицей внутри файла: Задача 1. Даны два целых...

Вопрос по файлах в С++ - C++
Возник вопрос по файлах. Эсть масив float B={0}; заполнений елементами, необходимо значения перенести в файл, которий потом...

gotoxy в файлах - C++
Подскажите вот на экране можно gotoxy переместить курсор куда захочешь, а в файлах так можно, если можно то как???? Файлах .txt


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

Или воспользуйтесь поиском по форуму:
Maqvaer
3 / 3 / 0
Регистрация: 23.10.2009
Сообщений: 25
27.10.2009, 11:51  [ТС]     Cравнение слов в файлах. #7
работает
Yandex
Объявления
27.10.2009, 11:51     Cравнение слов в файлах.
Ответ Создать тему
Опции темы

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