Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Работа со строками в Си.

Автор: Bo2nik 25.03.2008 0:09

Задача такая: даны два файла, считываем из них строки и как только найдем первое различие выводим этот символ на экран. Например если в одном файле есть "aaaaddezz", в другом "aaaaddhzz", то должен вывести "h". Задачка правда легкая, только у меня выводит всю строку, а не первый различный символ. До меня чето недоходит. Подскажите где подправить код надо:

Код

#include "stdafx.h"
#include <stdio.h>
#include <string.h>

main()
{
    int k,i;
    char line1[10],line2[10];
    FILE *fp1,*fp2;
    fp1 = fopen ("text1.txt","r");
    fp2 = fopen ("text2.txt","r");
    while ((!feof(fp1)) && (!feof(fp2)))
    {
        fgets (line1,10,fp1);
        fgets (line2,10,fp2);
        k=strcmp (line1,line2);
        if (k == 1 || k == -1)
        {
            printf ("Razlichiya v stroke: \n");
            printf ("%s\n",line1);
            break;
        }
    }
}

Автор: volvo 25.03.2008 0:36

Проверил ты на равенство:

Цитата
        k=strcmp (line1,line2);
, теперь если строки не равны, то:


...
if(strcmp(line1, line2)) { // этого достаточно, не надо проверять на +/- 1
char *p1 = line1, *p2 = line2;
while(*p1++ == *p2++); // пока символы одинаковы - продвигаемся дальше
printf("%c\n", *(--p1));
}
...

Автор: Bo2nik 25.03.2008 0:49

Это выводит предыдущий символ что-ли:

Код

printf("%c\n", *(--p1));


Еще вопрос: программа выводит два символа, когда найдет отличия, потому что два while.
И ещё: переменная k нигде не используется, значит её можно удалить?

Автор: volvo 25.03.2008 0:56

Да, потому что while(*p1++ == *p2++) "проскакивает" его, надо вернуться на один назад...

Автор: Bo2nik 25.03.2008 1:02

Всё, разобрался. Спасибо огромное, volvo.