IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа со строками в Си., Microsoft Visual Studio .NET 2003
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


Задача такая: даны два файла, считываем из них строки и как только найдем первое различие выводим этот символ на экран. Например если в одном файле есть "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;
        }
    }
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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


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


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


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

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


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

Сообщение отредактировано: Bo2nik -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Да, потому что while(*p1++ == *p2++) "проскакивает" его, надо вернуться на один назад...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской
Реальное имя: Никита

Репутация: -  0  +


Всё, разобрался. Спасибо огромное, volvo.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.11.2020 0:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name