Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа со строками в Си.
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Bo2nik
Задача такая: даны два файла, считываем из них строки и как только найдем первое различие выводим этот символ на экран. Например если в одном файле есть "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
Проверил ты на равенство:
Цитата
        k=strcmp (line1,line2);
, теперь если строки не равны, то:


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

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


Еще вопрос: программа выводит два символа, когда найдет отличия, потому что два while.
И ещё: переменная k нигде не используется, значит её можно удалить?
volvo
Да, потому что while(*p1++ == *p2++) "проскакивает" его, надо вернуться на один назад...
Bo2nik
Всё, разобрался. Спасибо огромное, volvo.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.