C语言:字符串函数的实现

来源:互联网 发布:汽车维修入库软件 编辑:程序博客网 时间:2024/06/07 16:37
字符串函数:

如何自己编写strlen,strcpy, strcat, strcmp, atoi , itoa

1.strlen:计算字符串长度.
它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

int Mystrlen(const char *str){ assert(str != NULL);//不可以传空指针 int i = 0; while(*str!='\0')//遇'\0'时结束 {  i++;  str++; } return i;//字符串有效长度,不包含'\0'}




2.strcpy:字符串复制.

把src中的字符一个一个复制到des中void Mystrcpy(char *des,char *src){ int i; for(i=0;src[i]!='\0';i++)   {  des[i] = src[i];  // 也可以表示成:*(des+i) = *(src+i),复制 } des[i] = '\0';//标志字符串复制结束}



3.strcat:字符串的连接.

把src所指字符串添加到des结尾处(覆盖des结尾处的'\0')实现字符串的连接。char * Mystrcat(char *des,const char *src){ assert( des != NULL && src != NULL);//断言不为空串  if(des == NULL || src == NULL)  {   return des;  }  char *p =des;  while( *des != '\0')  {   des++;//找到des的尾  }  while( *src != '\0')  {   * des++ = *src++;//字符串的连接  }  return p;//返回目的地指针des  }



4,strcmp:字符串的大小比较.

设这两个字符串为str1,str2,若str1==str2,则返回零;若str1str2,则返回正数。int Mystrcmp(const char *str1 ,const char *str2){ assert(str1 != NULL && str2 != NULL);    int tmp; while((tmp=*str1 -*str2)==0) {  str1++;  str2++; } if(tmp>0) {  return 1; } if(tmp==0) {  return 0; } if(tmp<0) {  return -1; } return tmp;}



5.atoi:字符串转换成整形数的一个函数

“123”->123,"1a23"->1,"a123"->0int Myatoi(const char *str){ int tmp =0; while(isdigit(*str)) //isdigit是一个判断是否是数字的函数 {  tmp=tmp*10+(*str -'0');//每个数的ASCII码为(n-'\0'),tmp*10增高位数即1->12->123  str++; } return tmp; }




6.itoa 取整数输入值,并将其转换为相应进制数字的字符串
123->"123"char * Myitoa(char *str,int num){ int tmp=0; int count = 0; char *p = str; int y; while(num!=0) {  tmp=num; //依次取下3 ,2,1.  num/=10;//降低位数 即;123->12->1  *str++= tmp+'0';//字符串中数字对应的ASCII码为('\0'+n)  count++; //统计次数 } *str= '\0'; // 字符串以'\0'结尾 str--; for(y = 0;y < count/2;y++)  //字符串的逆置 {  tmp = *(str - y);  *(str - y) = *(p + y);  *(p + y) = tmp; } return p;}



C语言:字符串函数的实现