在下面的代码中,虽然字符串是相同的,但我输出为“字符串不同”
逻辑是什么?
#include <iostream>
using namespace std;
main(void)
{
char str1[30]="India",str2[30]="India";
cout<<"str1 address :"<<str1<<endl;
cout<<"str2 address :"<<str2<<endl;
if(str1==str2)
cout<<"strings same"<<endl;
else
cout<<"strings are different"<<endl;
}
即使使用strcmp()
,输出也相同,即“字符串不同”。
#include <iostream>
#include <string.h>
using namespace std;
main(void)
{
char str1[30]="India",str2[30]="India";
cout<<"str1 address :"<<str1<<endl;
cout<<"str2 address :"<<str2<<endl;
if(strcmp(str1,str2))
cout<<"strings same"<<endl;
else
cout<<"strings are different"<<endl;
}
答案 0 :(得分:4)
因为你无法比较那样的C字符串。我不确定std::string
(您应该使用它,因为这是C ++),但是当您使用字符数组时,您在地址上使用==
运算符,而不是相同。使用strcmp
比较C字符串。
编辑:正如Beer先生所说,您可以使用==
上的std::string
运算符,因此请尝试将字符串更改为:
std::string str1 = "India", str2 = "India";
答案 1 :(得分:1)
他们的地址不一样。你正在比较他们的指针。 他们的数据是相同的,你需要像strcmp()。
str1指向第一个数组的第一个字节的地址。 str2指向第二个数组的第一个字节的地址。 仅在某些编译器优化时才相同。(这不是%100可能,在复制/分配操作后可能会失败)
答案 2 :(得分:1)
通过在==
中使用if(str1==str2)
比较char数组,您要比较两个不同数组的基地址(不相同),您应该使用if(!strcmp(str1, str2))
来比较字符串。
阅读:int strcmp ( const char * str1, const char * str2 );
returns返回一个表示字符串之间关系的整数值:
零值表示两个字符串相等 大于零的值表示不匹配的第一个字符在str1
中的值大于str2
中的值;小于零的值表示相反。