strcmp函数,cmp即compare,它是用来比较两个字符串的.
因为这两个字符串是用来比较的,所以它们当然是const,因为在比较的过程中是不可能去修改这两个字符串的.但它比较的结果不仅仅是用来说这两个字符串是否相等,它还可以表现出这两个字符串谁大谁小.那大和小到底是怎么定义的呢?我们来试一下:
结果为0,表示这两个字符串相等.这点不舒服的地方是不能用来作为if的条件.
那我们可不可以拿两个数组来比较他们相不相等呢.不可以.编译器会给我们一个warning,它说数组的比较永远都是false.为什么,因为这两个数组一定不会是相同的地址,当我们用像s1==s2比较这两个数组,它表达的是他们是否是相同的地址,所以肯定不行.
我们把第二个字符串改成bbc.结果是-1.表明s1比s2小.如果改为Abc,这个时候的结果就是1,表明s1比s2大.那如果我们再改一下,把s2改成abc (有空格).结果是-1.它告诉我们第二个比第一个更大.其实这相当于拿\0的ascii码值减去空格的ASCII码值,得到-32,即s1小于s2,最后返回-1.(有些编译器会返回两者ASCII码的差值)
我们来写一下自己的mycmp:
意思是我们拿这两个数组对应的单元进行比较,通过++一直比较下去,如果什么时候不相等了就break,否则当s1(或s2也可以,不用特地去比较哪个大哪个小,反而更费时间)的最后一个字符为0就break.
我们做一下改进:
我们省去了if else,直接把它们放到循环条件那里做判断,然后循环体只有idx++让两个数组单元一直往后走.
我们还能再继续优化吗?当然可以:
我们省去了对idx的定义,直接让指向这两个字符串的指针边往后走边对比.
后面这两种写法执行效率谁高谁低很难说.最后的执行效率很大程度上编译器会帮你做优化的.你无论写成那种样子,编译器最后产生的代码可能是差不多的.ps:个人感觉最后一个更elegant.
(注意!这三段代码返回的都是这两个字符串的差值.)