strcmp 函数实现

strcmp

int strcmp(constchar*str1,constchar*str2);

str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定:
①str1小于str2,返回负值或者-1(VC返回-1);②str1等于str2,返回0;
③str1大于str2,返回正值或者1(VC返回1);



函数形式如下:

 int strcmp(const char *str1, const char *str2)
{
   int ret=0;
   while( !(ret = *(unsigned char*)str1 - *(unsigned char*)str2 ) && *str1 )
     {
       str1++;
       str2++;
     }
     if(ret < 0)
        return -1;
     else if(ret > 0) 
        return 1;
     return 0;    
 }
unsigned char
int/long/short等不指定signed/unsigned时都默认是signed

char在标准中是unsigned

都占1个字节



那么 char与signed char, unsigned char这三者的区别

1.ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char。而不是像short、int一样只有两种(int默认就是unsigned int).
2.三者都占1个字节
3.signed char取值范围是 -128 到 127(有符号位)
unsigned char 取值范围是 0 到 255
4.内存中一串二进制,它的含义,就是这个类型来说明的。
5.所谓signed char 和 unsigned char 其实是相对“运算”而说的,已经脱离了我们字面含义“字符”,表示的范围有限。

6.不同的编译器对char是什么定义不一样,因为这三种类型的对象在存储介质中的表现形式是一样的(都是一个占8bit的01串,只是解析的时候不同)。

char的使用方法

1)当字符用
表示一个ASCII码0-127
2)当单字节整数
从本质上来说,字符('a', 'b', 'c'等)本质上也是一个整数,只是字符代表的值是0~127,我们可以用char表示一个不太大的整数

signed char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255。
但是屏幕上面的显示可能不一样。

char可以赋值给整数类型,但是如果要用char表示数据类型,只能是整数类型,signed范围一般不能超出-128~127,无符号可以表示0-255.超出会溢出的

ANSI C (ANSI C是C语言的标准,任何C语言的编译器都在ANSI C的基础上扩充。ANSI C几乎不能完成任何程序的开发。TC、VC等都对ANSI C进行了扩充,加入了自己的规则和库之类的。)


猜你喜欢

转载自blog.csdn.net/pmdream/article/details/79012450