| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4217 人关注过本帖
标题:字符串比较
只看楼主 加入收藏
yole
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-7-10
收藏
得分:0 
[bo][un]cosdos[/un] 在 2008-7-11 18:03 的发言:[/bo]




if(s=="a168")  // 比较地址

为什么是比较地址,能说得明白些吗?
2008-07-11 18:05
水中无月
Rank: 1
等 级:新手上路
帖 子:190
专家分:9
注 册:2008-6-17
收藏
得分:0 
这个……还是自己看书吧。说起来可是一大堆啊,呵呵

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-07-11 18:07
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
[bo][un]yole[/un] 在 2008-7-11 18:02 的发言:[/bo]



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

只是判断值,没说要比较什么地址。
如果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-07-11 18:08
水中无月
Rank: 1
等 级:新手上路
帖 子:190
专家分:9
注 册:2008-6-17
收藏
得分:0 
string name, a;// 这个,好象超出了C语言范畴吧?是C++的STL?

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-07-11 18:09
xxwpk007
Rank: 4
等 级:业余侠客
帖 子:166
专家分:289
注 册:2007-7-29
收藏
得分:0 
自己写的

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-07-11 18:10
yole
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-7-10
收藏
得分:0 
还是不怎么清楚·

不过比以前清楚一些了^_^
2008-07-11 18:11
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
之所以说==比较的是地址,是因为==是C语言里面的一个基本的操作符。然后,基本操作符操作的都是基本数据类型。 所以你的
char a[10];
char b[10];
if (a == b) {}
在编译器看来,其实比较的是a,b的值。 而又因为数组的名字可以(注意,是可以,我可没有说是)当做指向该数组的指针来用,所以,在这里编译器其实取得是那个指针的值,也就是数组存放的内存位置的开始的值。 这个值在编译器看来可以当作是int类型。 所以编译器其实比较的是这个地址值,而不是数组中存放的元素的值。

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

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

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-07-11 19:14
水中无月
Rank: 1
等 级:新手上路
帖 子:190
专家分:9
注 册:2008-6-17
收藏
得分:0 
发现mqh21364好有耐心向新手解释……
其实只要看了书的都知道了,何必这么麻烦呢?

十里平湖霜满天,寸寸青丝愁华年,对月形单望相互,只羡鸳鸯不羡仙.
2008-07-11 19:19
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
我也从那里过来的因为。

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-07-11 19:25
yole
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2008-7-10
收藏
得分:0 
回复 17# mqh21364 的帖子
太感谢了~
2008-07-11 19:32
快速回复:字符串比较
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016280 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved