首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一个容易的字符串比较

2013-01-26 
一个简单的字符串比较const char* p1 abcstd::string str1 abcconst char* p2 str1.c_str()i

一个简单的字符串比较

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 开放现金提取功能 分享资源赚取 现金 给大家提供一个 把手上的空闲资源进行出售 获得现金的平台!

热点排行