比较C中的两个字符串?
由于未进行比较,此代码不起作用。为什么? 如果,则所有名称都会通过比较C中的两个字符串?,c,string,comparison,C,String,Comparison,由于未进行比较,此代码不起作用。为什么? 如果,则所有名称都会通过 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
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);
}
您当前正在比较这两个字符串的地址
用于比较两个字符数组的值
if (strcmp(namet2, nameIt2) != 0)
要比较两个C字符串(char*
),请使用。当字符串相等时,函数返回0
,因此您需要在代码中使用此选项:
if (strcmp(namet2, nameIt2) != 0)
如果你(错误地)使用
您正在比较两个字符串的指针(地址),当您有两个不同的指针时(在您的情况下总是如此),这两个字符串的指针(地址)是不相等的。您需要使用strcmp
:
strcmp(namet2, nameIt2)
您尝试在此处比较指针,而不是指向的内容(即,您的字符)
您必须使用memcmp
或str{,n}cmp
来比较内容。数组的名称指示起始地址。namet2
和nameIt2
的起始地址都不同。因此,equal to(==
)运算符检查地址是否相同。对于比较两个字符串,更好的方法是使用strcmp()
,或者我们可以使用循环逐个字符进行比较。对于比较两个字符串,可以使用内置函数strcmp()
使用头文件string.h
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 :)
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;
}
要回答您问题中的原因:
因为等式运算符只能应用于简单的变量类型,例如float
s、int
s或char
s,而not则应用于更复杂的类型,例如结构或数组。
要确定两个字符串是否相等,必须逐个字符显式比较这两个字符串 scanf(“%s”)和&variable
看起来可疑。数组名“衰减”为指向第一个元素的指针,因此&variable不是不必要的,就是严重的错误,具体取决于变量类型。
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;
}