帮我写一个简易的strcmp函数(C语言)。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帮我写一个简易的strcmp函数(C语言)。相关的知识,希望对你有一定的参考价值。
帮我用最简单的代码写一个strcmp程序。
然后告诉我strcmp的返回值代表什么?
① c的strcmp简洁实现可以是这样的:
int strcmp(const char* s1, const char* s2)while(*s1 && (*s1==*s2))
s1++,s2++;
return *(const unsigned char*)s1-*(const unsigned char*)s2;
② strcmp的返回值可以有3种,即<0, =0, >0 (任意一个数值),代表的含义分别是: str1 strcmp用的是二进制比较,意思是按字典顺序,比如: 字母a < 字母 b;而a > A。 (这是因为a的ascii码是97,而A的是65)。
理解了这个,上面的代码就好理解了。 while就是s1,s2从头到位一个一个字符的比较。如果s1为空,或者s1不等于s2,则中断循环 (s1不为空,s2为空,则是*s1 != *s2,退出循环)。返回值是循环中断时的字符(分别s1和s2对应的位置,*s1-*s2, 如果是上面说的 'a' - 'A', 那么返回的就是97-65=32),那么意味着a在A前面, strcmp > 0。
之所以先转换成const unsigned char*再作减法,是由于c的char有三种: char, signed char 和unsigned char。 char就是'a'这样的, 而 signed char 则是-127~126之间的数值,而unsigned char则是0~255之间的一个值。 转换成unsigned char就是要“确保” 'a' ---> 97。 你要不转换,也是可以的。
说明一点,很多c的lib实现,比如gnu c, 都是把结果处理成: -1, 0, 1, 而不是这个字符对应的ascii码的差值。
if(src==NULL||des==NULL) return NULL;
while((*src++==*des++)!='\\0');
if(*src=='\\0') return 0;
return (*src-*des);
追问
复制勿扰
C语言:怎么将十六进制字符串转换成二进制字符串,谁帮我写个函数
参考技术A 十六进制转成十进制的函数://返回16进制字符串s对应的整数值,遇到任何一个非法字符都返回-1。
int HexToDec(char *s)
char *p = s;
//空串返回0。
if(*p == '\0')
return 0;
//忽略开头的'0'字符
while(*p == '0')
p++;
int dec = 0;
char c;
//循环直到字符串结束。
while(c = *p++)
//dec乘16
dec <<= 4;
//数字字符。
if(c >= '0' && c <= '9')
dec += c - '0';
continue;
//小写abcdef。
if(c >= 'a' && c <= 'f')
dec += c - 'a' + 10;
continue;
//大写ABCDEF。
if(c >= 'A' && c <= 'F')
dec += c - 'A' + 10;
continue;
//没有从任何一个if语句中结束,说明遇到了非法字符。
return -1;
//正常结束循环,返回10进制整数值。
return dec;
十进制转成二进制的函数:
/*递归法求二进制数*/
#include<stdio.h>
void printb(int x,int n);
void main()
int x;
printf("input number:");
scanf("%d",&x);
printf("number of decimal form: %d\n",x);
printb(x,sizeof(int)*8);
putchar('\n');
void printb(int x,int n)
if(n>0)
putchar('0'+( (unsigned)(x & (1<<(n-1) ) )>>(n-1)));
printb(x,n-1);
追问
我现在要得到二进制的字符串啊,不是输出来
追答#include
void main()
char c[16];
int a[16][4]=0;
int i=0,j;
scanf("%s",c);---->>以字符串形式输入
while(c[i])--------->>>把字符串的每一位还原为数字
if(c[i]>'0'&&c[i]='A'&&c[i]='a'&&c[i]=0;j--)
a[i][j]=c[i]%2;
c[i]/=2;
for(j=0;j<4;j++)
printf("%d",a[i][j]);
i++;
以上是关于帮我写一个简易的strcmp函数(C语言)。的主要内容,如果未能解决你的问题,请参考以下文章
C语言编程-用数组方法编写函数strcmp,比较两个字符串的大小。