Сравнение двух массивов (из строки или символа) И не выводить количество их различий - PullRequest
0 голосов
/ 05 апреля 2020

Почему выход Разница, который указывает разницу между двумя массивами, равен нулю? язык: C

#include <stdio.h>
#include <stdlib.h>
long int n=100000;
long int Difference=0;
long int q;
char *str1,*str2;
int main()
{
char string1[n];
char string2[n];
scanf("%ld",&q);
scanf("%s",&string1[q]);
scanf("%s",&string2[q]);
str1=string1;
str2=string2;
for(int i=0; str1[i]!='\0' && str2[i]!='\0'; i++)
{
if(str1[i]!=str2[i])
Difference+=1;
}
printf("%ld",Difference);
return 0;
}

1 Ответ

0 голосов
/ 05 апреля 2020

Предполагая, что переменная q используется в качестве смещения памяти, вам нужно установить ваши указатели символов, str1 и str2, в ячейку памяти в массивах, где scanf хранит значения, считанные из stdin.

#include <stdio.h>
#include <stdlib.h>

long int n = 100000;
long int Difference = 0;
long int q;
char *str1,*str2;

int main()
{
    char string1[n];
    char string2[n];

    scanf("%ld",&q);
    scanf("%s",&string1[q]);
    scanf("%s",&string2[q]);

    // Set the char pointers to the address in the array
    // q distance from the initial address of the array 
    // because you stored your input strings at that address
    // and not at the beginning of the array in memory
    str1 = string1 + q;
    str2 = string2 + q;

    for(int i=0; str1[i] != '\0' && str2[i] != '\0'; i++)
    {
        if(str1[i] != str2[i])
            Difference += 1;
    }

    printf("%ld", Difference);
    return 0;
}
...