CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

字符串比较

楼主freezh(只提供思路)2006-03-03 22:55:27 在 C/C++ / C++ 语言 提问

#include<iostream>  
  using   namespace   std;  
  //-------------------------------------  
  int   main(){  
      cout<<("join"=="join"   ?   ""   :   "not   ")<<"equal\n";       //   直接字面值比较  
      char*   str1="good";  
      char*   str2="good";  
      cout<<(str1==str2   ?   ""   :   "not   ")<<"equal\n";               //   字符指针比较  
      char   buffer1[6]="Hello";  
      char   buffer2[6]="Hello";  
      cout<<(buffer1==buffer2   ?   ""   :   "not   ")<<"equal\n";   //   字符数组比较  
  }//====================================  
   
   
  以上代码书上说输出  
  not   equal  
  not   equal  
  not   equal  
   
  但是我在vc6里运行了,结果是  
  equal  
  equal  
  not   equal    
  我不知道是什么原因,请教! 问题点数:20、回复次数:13Top

1 楼zenny_chen(ACE Intercessor)回复于 2006-03-03 23:08:09 得分 0

编译器优化了。  
   
  Top

2 楼lei001(太极)回复于 2006-03-03 23:25:35 得分 0

应该是编译器的问题Top

3 楼steedhorse(晨星)回复于 2006-03-03 23:40:29 得分 0

同样的字面常量字符串的存储,这个现在很少有编译器不做优化了。Top

4 楼Kenmark(fenix)回复于 2006-03-04 13:00:37 得分 0

编译器进行了优化,同样的常量字符串使用了同一个地址,节省了内存空间Top

5 楼Kenmark(fenix)回复于 2006-03-04 13:00:50 得分 0

现在一般都   不用了Top

6 楼rabbit729(无名胜有名)回复于 2006-03-04 13:21:35 得分 0

最好还是利用strcmpy(str1,str2)进行比较,如果是string对象的话,可以直接利用"=="等逻辑比较符。Top

7 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-04 15:01:23 得分 0

cout<<("join"=="join"   ?   ""   :   "not   ")<<"equal\n";       //   直接字面值比较  
      char*   str1="good";  
      char*   str2="good";  
      cout<<(str1==str2   ?   ""   :   "not   ")<<"equal\n";               //   字符指针比较  
      char   buffer1[6]="Hello";  
      char   buffer2[6]="Hello";  
      cout<<(buffer1==buffer2   ?   ""   :   "not   ")<<"equal\n";   //   字符数组比较  
  ???????   晕,字符串还可以这样比较?  
  确切的说,上面的都不叫“字符串比较”,充其量就是char指针比较。  
  BE   CAREFUL:字符串比较   !=   char指针比较  
  Top

8 楼manplus(魅力加加)回复于 2006-03-04 15:32:00 得分 0

学习Top

9 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 21:16:18 得分 0

VC编译器吧。  
      char*   str1="good";  
      char*   str2="good";  
  因为编译器默认把给指针赋值变量定为const类型,是不可修改的。  
  有因为str1,2值相同。所以,在内存中就用一个字符串Top

10 楼MartenChan(蝎子)回复于 2006-03-05 19:40:40 得分 0

编译器处理了......Top

11 楼zh2817()回复于 2006-03-05 20:36:59 得分 0

除编译器  
  我认为主要还有一个在内存里的存储地址问题Top

12 楼sunguang13(haha)回复于 2006-03-06 09:30:10 得分 0

我以前也遇到过该问题,你可以看看你的编译器有什么问题没!Top

13 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-06 09:38:18 得分 0

字面常量编译后是放在数据段中的,  
  相同的值出现多次也只会在数据段中保存一份,  
  上面的指针只是指向这个数据段中对应的位置Top

相关问题

  • 字符串比较
  • 比较字符串
  • 字符串比较
  • 字符串比较函数
  • 字符串的比较
  • 字符串比较怪事!
  • 字符串比较问题
  • 字符串比较问题
  • 字符串比较问题
  • 字符串数组比较

关键词

得分解答快速导航

  • 帖主:freezh

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo