读书人

一个容易的字符串比较

发布时间: 2013-01-26 13:47:02 作者: rapoo

一个简单的字符串比较

const char* p1 = "abc";
std::string str1 = "abc";
const char* p2 = str1.c_str();
if (str1.c_str() == p1)
{
return 1;
}
if (p2 == p1)
{
return 2;
}
if (str1 == p1)
{
return 3;
}
return 0;


一般去面试,总会遇到字符串比较的面试题。

上面的代码中,第一个比较:
if (str1.c_str() == p1),是比较两个指针所指向的地址。str1.c_str()返回str1这个对象在内存里面所存放的实际字符串的地址,而p1则指向一个另外的字符串,虽然这两个地址里面的存放的字符串的值一样,但是地址本地不一样。

第二个个if (p2 == p1)通第一个比较一样,是比较两个地址的值。

第三个,就有有些微妙的事情发生,因为str1的类型是一个string,而p1是一个指针,系统没有提供不同类型的operator==函数,同时string有一个构造函数,其参数就是一个const char*的指针,所以在比较值钱,p1会被构造成一个string临时对象,然后让这个临时对象去和str1直行==操作。在string类中,这个操作会调用compare函数,而compare函数却去比较字符串的内容,而非地址。两个内容都是abc,所以这个比较返回的结果为true

http://jiushun8.com/forum.php 开放现金提取功能 分享资源赚取 现金 给大家提供一个 把手上的空闲资源进行出售 获得现金的平台!

读书人网 >编程

热点推荐