-2

在下面的代码中,虽然字符串相同,但我得到的输出是“字符串不同”

逻辑是什么?

#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;

}
4

3 回答 3

4

因为你不能像那样比较 C 字符串。我不确定std::string(你应该使用它,因为这是 C++),但是当你使用字符数组时,你在==地址上使用运算符,这不一样。用于strcmp比较 C 字符串。

编辑:正如 Beer 先生所说,您可以在 上使用==运算符std::string,因此请尝试将您的字符串更改为:

std::string str1 = "India", str2 = "India";
于 2013-07-04T18:33:48.187 回答
1

他们的地址不一样。您正在比较他们的指针。他们的数据是一样的,你需要像 strcmp() 这样的东西。

str1 指向第一个数组的第一个字节的地址。str2 指向第二个数组的第一个字节的地址。仅与某些编译器优化相同。(这不是 %100 可能的,在复制/分配操作后可能会失败)

于 2013-07-04T18:33:03.917 回答
1

通过使用==in比较 char 数组,if(str1==str2)您正在比较两个不同数组的基地址(不相同),您应该使用它if(!strcmp(str1, str2))来比较字符串。

阅读:int strcmp ( const char * str1, const char * str2 );

return 返回一个整数值,表示字符串之间的关系:
零值表示两个字符串相等。
大于零的值表示第一个不匹配的字符 in 的值str1大于 in str2;小于零的值表示相反。

于 2013-07-04T18:34:19.813 回答