Сравнение двух строк в C?
Этот код не работает, поскольку сравнение не выполняется. Почему?
Все имена проходят мимо if
.
printf("Enter Product: \n");
scanf("%s", &nameIt2);
printf("Enter Description: \n");
scanf("%s", &descriptionI);
printf("Enter Quantity: \n");
scanf("%d", &qtyI);
printf("Enter Order Quantity: \n");
scanf("%s", &ordqtyI);
while (fscanf(fp4, "%s %s %d %s\n", &namet2, &description2, &qty2, &ordqty2) != EOF){
if(namet2 != nameIt2)
fprintf(fpt2, "%s %s %d %s\n", &namet2, &description2, qty2, &ordqty2);
}
Ответы
Ответ 1
Чтобы сравнить две строки C (char *
), используйте strcmp()
. Функция возвращает 0
, когда строки равны, поэтому вам нужно будет использовать это в своем коде:
if (strcmp(namet2, nameIt2) != 0)
Если вы (ошибочно) используете
if (namet2 != nameIt2)
вы сравниваете указатели (адреса) обеих строк, которые неравны, если у вас есть два разных указателя (что всегда имеет место в вашей ситуации).
Ответ 2
Для сравнения двух строк используйте встроенную функцию strcmp()
с помощью файла заголовка string.h
if(strcmp(a,b)==0)
printf("Entered strings are equal");
else
printf("Entered strings are not equal");
ИЛИ вы можете написать свою собственную функцию следующим образом:
int string_compare(char str1[], char str2[])
{
int ctr=0;
while(str1[ctr]==str2[ctr])
{
if(str1[ctr]=='\0'||str2[ctr]=='\0')
break;
ctr++;
}
if(str1[ctr]=='\0' && str2[ctr]=='\0')
return 0;
else
return -1;
}
Ответ 3
В настоящее время вы сравниваете адреса двух строк.
Используйте strcmp, чтобы сравнить значения двух char массивов
if (strcmp(namet2, nameIt2) != 0)
Ответ 4
Вы пытаетесь сравнить указатели здесь, а не содержимое того, на что указывает (т.е. ваши символы).
Для сравнения содержимого вы должны использовать memcmp
или str{,n}cmp
.
Ответ 5
Имя массива указывает начальный адрес. Начальный адрес как namet2
, так и nameIt2
отличается. Таким образом, оператор равен (==
) проверяет, совпадают ли эти адреса или нет. Для сравнения двух строк лучше использовать strcmp()
, или мы можем сравнивать символ по символу с помощью цикла.
Ответ 6
Чтобы ответить на вопрос "ПОЧЕМУ" в вашем вопросе:
Поскольку оператор равенства может применяться только к простым типам переменных, таким как float
s, int
s или char
s, а не для более сложных типов, таких как структуры или массивы.
Чтобы определить, равны ли две строки, вы должны явно сравнить символ символа символа по символу.
Ответ 7
Вам нужно использовать strcmp
:
strcmp(namet2, nameIt2)
Ответ 8
if(strcmp(sr1,str2)) // this returns 0 if strings r equal
flag=0;
else flag=1; // then last check the variable flag value and print the message
OR
char str1[20],str2[20];
printf("enter first str > ");
gets(str1);
printf("enter second str > ");
gets(str2);
for(int i=0;str1[i]!='\0';i++)
{
if(str[i]==str2[i])
flag=0;
else {flag=1; break;}
}
//check the value of flag if it is 0 then strings r equal simple :)