| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 1343 人关注过本帖
标题:字符串比较
收藏  订阅  推荐  打印 
yole
Rank: 2
等级:注册会员
帖子:46
积分:610
注册:2008-7-10

cosdos 在 2008-7-11 18:03 的发言:




if(s=="a168")  // 比较地址
为什么是比较地址,能说得明白些吗?
2008-7-11 18:05
水中无月
Rank: 2
等级:注册会员
帖子:186
积分:1992
注册:2008-6-17

这个……还是自己看书吧。说起来可是一大堆啊,呵呵

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-7-11 18:07
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1377
积分:14374
注册:2007-6-19

yole 在 2008-7-11 18:02 的发言:



恩啊啊,明白一点。
不过对你说的比较地址有点不明白。
==书上定义:关系运算符,判断此运算符左右两边表达式的值是否相等。

只是判断值,没说要比较什么地址。
如果int a=1,b=2;
还是能比较  if(a==b), ...
字符串是用数组实现的。
char name[] = "CCC";  // name 是数组
char * a = "AAA";     // a 是指针

if(name == a)   // 这个是地址的比较

------------------------------------------
在一些opp语言中确实存在 name == a 这样的比较方法,但实质是相同的。
C++中使用操作符重载机制实现 name == a。 (其底层实现是相同的) string name, a;

—>〉Sun〈<—
2008-7-11 18:08
水中无月
Rank: 2
等级:注册会员
帖子:186
积分:1992
注册:2008-6-17

string name, a;// 这个,好象超出了C语言范畴吧?是C++的STL?

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-7-11 18:09
xxwpk007
Rank: 2
等级:注册会员
帖子:52
积分:766
注册:2007-7-29

自己写的

char *string_in(char ch_ch[],char ch_find[])
{
    int i,j;
    int str_ch,str_find;
    str_ch = strlen(ch_ch);
    str_find = strlen(ch_find);
    char * ch;
    for(i = 0;i <= str_ch-str_find;i++)
    {
        for(j = 0;j <=str_find;j++)
        {
            if(ch_ch[i+j] == ch_find[j]) //比较两个字符是否相同
                ch = &ch_ch[i+j];
            else
            {
                ch = NULL;
                break;
            }
        }
        if(ch != NULL)
            return (ch-(str_find-1));//如果ch_find被包含在ch_ch中,就返回ch_ch中ch_find的开始地址
    }
    return ch;
}
2008-7-11 18:10
yole
Rank: 2
等级:注册会员
帖子:46
积分:610
注册:2008-7-10

还是不怎么清楚·

不过比以前清楚一些了^_^
2008-7-11 18:11
mqh21364
Rank: 4
等级:高级会员
帖子:638
积分:6970
注册:2008-2-28

之所以说==比较的是地址,是因为==是C语言里面的一个基本的操作符。然后,基本操作符操作的都是基本数据类型。 所以你的
char a[10];
char b[10];
if (a == b) {}
在编译器看来,其实比较的是a,b的值。 而又因为数组的名字可以(注意,是可以,我可没有说是)当做指向该数组的指针来用,所以,在这里编译器其实取得是那个指针的值,也就是数组存放的内存位置的开始的值。 这个值在编译器看来可以当作是int类型。 所以编译器其实比较的是这个地址值,而不是数组中存放的元素的值。

C++就不一样了。支持运算符的重载,就使得某些类(模板)在定义的时候重载了 == 运算符。 在这个重载的函数中也是一个个地挨着比较。 只不过这样以后,你用 == ,用到的是该类(模板)定义的那个而不是编译器自带的那个。 所以也可以见到用 == 直接比较复杂数据类型的例子。

如有错误,请指正,谢谢!

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-7-11 19:14
水中无月
Rank: 2
等级:注册会员
帖子:186
积分:1992
注册:2008-6-17

发现mqh21364好有耐心向新手解释……
其实只要看了书的都知道了,何必这么麻烦呢?

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-7-11 19:19
mqh21364
Rank: 4
等级:高级会员
帖子:638
积分:6970
注册:2008-2-28

我也从那里过来的因为。

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-7-11 19:25
yole
Rank: 2
等级:注册会员
帖子:46
积分:610
注册:2008-7-10
回复 17# mqh21364 的帖子

太感谢了~
2008-7-11 19:32
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.052773 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved