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

Сравнение строк - C++

Восстановить пароль Регистрация
 
DaisyRose
 Аватар для DaisyRose
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 6
28.05.2013, 14:25     Сравнение строк #1
Здравствуйте. Есть 2 файла содержимое которых нужно сравнить и вывести на экран не совпадающие строки. С считыванием строк вроде разобралась, а вот как сделать что бы он выводил несовпадающие строки... Можете помочь? даже хотя бы просто алгоритм подсказать
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
        FILE *oldf, *newf;//Указатели стаpого и нового файла
        char oldn[10], newn[10],//Имена файлов
        line1[100], line2[100], *p, *m;
        int  c1, c2, k, c;
        const char st=100;
        printf ( "Введите путь к 1-му файлу:" );
        scanf ( "%s", &oldn );
        printf ( "Введите путь ко 2-му файлу:" );
        scanf ( "%s", &newn );
        {
            if (( oldf = fopen (oldn, "r" )) != NULL )
            {
                {
                    for (p = line1; p-line1 < 100-1 && (c = getc(oldf)) != EOF; p++)
                        *p = c;
                    *p = '\0';
                }
                if ((newf = fopen (newn, "r" )) != NULL )
                {
                    for (m = line2; m-line2 < 100-1 && (c1 = getc(newf)) != EOF; m++)
                        *m = c1;
                    *m = '\0';
                }
                k=strcmp(line1,line2); //сравнение строк
                if (k==0)
                { }
                else
                {
                    printf ("line1=%s line2=%s", line1, line2);
                }
                fclose ( newf );
                fclose ( oldf );
            }
        }
    }
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 14:25     Сравнение строк
Посмотрите здесь:

C++ Сравнение строк
C++ Сравнение строк
сравнение строк C++
Сравнение строк C++
Сравнение строк C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
28.05.2013, 15:26     Сравнение строк #2
А зачем читать посимвольно, если есть функция fgets()
C++
1
2
3
4
5
6
7
while(!feof(oldf) && !feof(newf))
{
    fgets(line1,99,oldf);
    fgets(line2,99,newf);
    if(strcmp(line1,line2)!=0)
        printf ("line1=%s line2=%s", line1, line2);
}
DaisyRose
 Аватар для DaisyRose
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 6
28.05.2013, 15:32  [ТС]     Сравнение строк #3
Цитата Сообщение от zss Посмотреть сообщение
А зачем читать посимвольно, если есть функция fgets()
я знаю. с циклами в С++ не умею нормально работать. раньше с делфи работала
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.05.2013, 16:00     Сравнение строк #4
Так (2 пост) с gets() кривова-то будет работать. Если последние строки в файлах завершаются '\n', то лучше так сделать:
C++
1
2
3
4
5
6
7
8
9
while(1)
{
    fgets(line1, 100, oldf);
    if (feof(oldf)) break;
    fgets(line2, 100, newf);
    if (feof(newf)) break;
    if(strcmp(line1, line2) != 0)
    printf ("line1 = %sline2 = %s", line1, line2);
}
А если последние строки не завершать '\n', то неправильно сравнение может работать. Например, две одинаковые строки, но одна в конце файла, а другая нет. gets() добавит в одну строку '\n', а в другую нет, и сравнение покажет неравенство строк.
Yandex
Объявления
28.05.2013, 16:00     Сравнение строк
Ответ Создать тему
Опции темы

Текущее время: 20:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru