C++字符串函数使用整理
在编写程序时,我们常常要面对字符串的使用。字符串库中包含着许多的函数可以帮助我们较为简便地解决问题。
字符串操作相关的函数的具体实现以及算法分析
- 1、strcpy
函数原型:char *strcpy(char *dest, const char *src)
函数功能:将源字符串src的内容复制到目的字符串dest中,并返回指向目的字符串dest的指针。
注意:要求dest字符串长度要大于或等于src长度,否则会越界。复制时会将src的结束符'\0'也复制到dest中。
测试:
int main(){char s1[]="1234567";char s2[]="abcd";cout<< <
这说明了s2的结束符也复制到s1中了。复制之后s1中变为 a b c d \0 6 7 \0
函数实现:
char *mystrcpy(char *dest, const char *src){assert(dest!=NULL && src!=NULL);char *destCopy=dest;while((*dest++=*src++)!='\0'); //此处已经将src的结束符复制到了dest中return destCopy;}assert宏,其用法是"assert(表达式)",当表达式为假时强行中止程序,并给出错误提示。需要头文件#includewhile这一行程序也可以这么写:while(*src!='\0'){ //相当于while(*src)*dest++=*src++;}*dest='\0'; //在目标字符串结尾加结束符
- 2、strncpy
函数原型:char *mystrncpy(char *dest, const char *src, int count)
函数功能:将源字符串src的前count个字符复制到dest中
注意:src的前count个字符将会覆盖dest的相应字符。src的结束符可能被复制进去,这点见下面测试。
测试1:
int main(){char s1[]="12345678";char s2[]="abcd";cout<<
测试1和测试2的区别就是是否把s2的结束符复制到s1中了。函数实现:
char *mystrncpy(char *dest, const char *src, int count){assert(dest!=NULL && src!=NULL);char *destCopy=dest;while(count--&&(*dest++=*src++)!='\0');return destCopy;}
- 3、strcat
char d[20]="Golden";char s[20]="View";strcat(d,s);//打印dprintf("%s",d);
char *mystrcat(char *dest, const char *src){assert(dest!=NULL && src!=NULL);char *destCopy=dest;while(*dest!='\0')dest++;while((*dest++=*src++)!='\0');return destCopy;}
- 4、strcmp
int mystrcmp(const char *firstStr, const char *secondStr){assert(firstStr!=NULL && secondStr!=NULL);while(*firstStr&&*secondStr&&*firstStr==*secondStr){firstStr++; //只有两字符相等时才往后挪secondStr++;}return (*firstStr-*secondStr);}
上面程序中while循环如果写成while(*firstStr&&*secondStr&&*firstStr++==*secondStr++)是错的。因为这样的话碰到不相等的字符也往后挪了一位再进行下面的return比较。
- 5、strlen
strlen所作的仅仅是一个计数器的工作
它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描
直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。
实现如下:
int mystrlen(const char *str){int count=0;while(*str!='\0'){str++;count++;}return count;}
- 6、strchr
strchr是计算机编程语言的一个函数
原型为extern char *strchr(const char *s,char c)
可以查找字符串s中首次出现字符c的位置。
测试:char s1[100]="12345678";cout<<
返回的是指向所给字符的指针
strchr函数实现:char *mystrchr(char *str, int c){assert(str!=NULL);while(*str++!='\0'){if(*str==(char)c)return str;}return NULL;}
- 7、strpbrk
函数功能:strpbrk是在源字符串(s1)中找出最先含有搜索字符串(s2)中任一字符的位置并返回,若找不到则返回空指针。
测试:
char s1[100]="12345678";char s2[]="002001";cout<<
char *mystrpbrk(char *str1, char *str2){while(*str1!='\0'){if(strchr(str2,*str1)!=NULL)return str1;str1++;}return NULL;}
以上就是我近期以来对字符串函数使用的一些整理及归纳。参考了CSDN及博客园的一些相关文章,并从中学到了许多。希望能和大家一起分享学习。