H面试程序(0):字符串一些常用函数的实现
来源:互联网 发布:insar数据下载 编辑:程序博客网 时间:2024/06/08 06:45
1、Strcat函数原型如下:
char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数{ char * address = strDest; //该语句若放在assert之后,编译出错 assert((strDest != NULL) && (strScr != NULL)); //对源地址和目的地址加非0断言 while(*strDest) //是while(*strDest!=’\0’)的简化形式 { //若使用while(*strDest++),则会出错,因为++是不受循环 strDest++; //约束的。所以要在循环体内++;因为要是*strDest最后指 } //向该字符串的结束标志’\0’。 while(*strDest++ = *strScr++) { NULL; //该循环条件内可以用++, } //此处可以加语句*strDest=’\0’;有无必要?return address; //为了实现链式操作,将目的地址返回}
2、Strcpy函数原型如下:
char *strcpy(char *strDest, const char *strScr){ char *address=strDest; assert((strDest != NULL) && (strScr != NULL)); while(*strScr) //是while(*strScr != ’\0’)的简化形式; { *strDest++ = *strScr++; } *strDest = '\0'; //当strScr字符串长度小于原strDest字符串长度 return address; //时,如果没有改语句,就会出错了。}
3、Strcmp函数原型如下:
int strcmp (const char *str1,const char *str2){ int len = 0; assert((str1 != '\0') && (str2 != '\0')); while(*str1 && *str2 && (*str1 == *str2)) { str1++; str2++; } return *str1-*str2;}
4、Strlen函数原型如下:
int strlen(const char *str){ int len = 0; assert(str != NULL); while(*str++) { len++; } return len;}
5、memcpy函数
函数原型:void *memmove(void *dest, const void *source, size_t count)
返回值说明:返回指向dest的void *指针
参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数
函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。
void *memcpy(void *dest, const void *source, size_t count){ assert((NULL != dest) && (NULL != source)); char *tmp_dest = (char *)dest; char *tmp_source = (char *)source; while(count --)//不对是否存在重叠区域进行判断 *tmp_dest ++ = *tmp_source ++; return dest;}
6、memmove函数
函数原型:void *memcpy(void *dest, const void *source, size_t count);
返回值说明:返回指向dest的void *指针
函数说明:memcpy功能和memmove相同,但是memcpy中dest和source中的区域不能重叠,否则会出现未知结果。
函数memcpy() 从source 指向的区域向dest指向的区域复制count个字符,如果两数组重叠,不定义该函数的行为。而memmove(),如果两函数重叠,赋值仍正确进行。
memcpy函数假设要复制的内存区域不存在重叠,如果你能确保你进行复制操作的的内存区域没有任何重叠,可以直接用memcpy。 如果你不能保证是否有重叠,为了确保复制的正确性,你必须用memmove。
void *memmove(void *dest, const void *source, size_t count){ assert((NULL != dest) && (NULL != source)); char *tmp_source, *tmp_dest; tmp_source = (char *)source; tmp_dest = (char *)dest; if((dest + count<source) || (source + count) <dest)) {// 如果没有重叠区域 while(count--) *tmp_dest++ = *tmp_source++; } else { //如果有重叠,反向拷贝。以避免源字符串被部分目的字符串覆盖 tmp_source += count - 1; tmp_dest += count - 1; while(count--) *--tmp_dest = *--tmp; } return dest;}
7.atoi
原型: int atoi(const char *nptr);
函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。
#include <stdio.h>#include <assert.h>static int atoi(const char* str){ int result = 0; int sign = 0; assert(str != NULL); // proc whitespace characters while (*str==' ' || *str=='\t' || *str=='\n') ++str; // proc sign character if (*str=='-') { sign = 1; ++str; } else if (*str=='+') { ++str; } // proc numbers while (*str>='0' && *str<='9') { result = result*10 + *str - '0'; ++str; } // return result if (sign==1) return -result; else return result;}
7. itoa
char *itoa( int value, char *string,int radix);
原型说明:
value:欲转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等
char *itoa(int val, char *buf, unsigned radix){ char *p; char *firstdig; char temp; unsigned digval; p = buf; if(val <0) { *p++ = '-'; val = (unsigned long)(-(long)val); } firstdig = p; do{ digval = (unsigned)(val % radix); val /= radix; if (digval > 9) *p++ = (char)(digval - 10 + 'a'); else *p++ = (char)(digval + '0'); }while(val > 0); *p-- = '\0 '; do{ temp = *p; *p = *firstdig; *firstdig = temp; --p; ++firstdig; }while(firstdig < p); return buf;}
- H面试程序(0):字符串一些常用函数的实现
- H面试程序(0):字符串一些常用函数的实现
- 实现字符串的一些常用字符串函数
- 一些常用的字符串函数
- 一些常用字符串操作函数的内部实现
- string.h中一些函数的实现
- H面试程序3:去除字符串中多余的空格
- H面试程序(19): 统计出现频率的最高的K的字符串
- C语言标准库string.h中常用的字符串函数的实现
- H面试程序(8):不含重复字母的字符串的全排列
- H面试程序(9): 左旋字符串
- H面试程序(10): 字符串包含问题
- H面试程序(28):字符串处理转换
- H面试程序(12): 输出字符串中第一个只出现一次的字母
- H面试程序(7):去掉字符串中重复的数
- H面试程序(6):字符串中找出连续最长的数字串
- MSQL中常用的一些字符串函数
- 字符串处理的一些常用函数
- MAC下Android的Eclipse开发环境的搭建
- 动态链接库基础
- hdu 3954 Level up(线段树)
- 双向链表初步
- 【字符串操作】02.删除字符串中的空格和数字
- H面试程序(0):字符串一些常用函数的实现
- 黑马程序员------.Net基础之接口
- 黑马程序员__JAVA项目分析__银行业务调试系统
- 使用ClassLoader加载包内的资源
- mysql常用的操作(二)
- linux
- 分类:决策树——Papers or Articles to read
- Box2d基础知识
- 页面开发,挺不简单