在编写程序时,我们常常要面对字符串的使用。字符串库中包含着许多的函数可以帮助我们较为简便地解决问题。
函数原型:char *strcpy(char *dest, const char *src)
函数功能:将源字符串src的内容复制到目的字符串dest中,并返回指向目的字符串dest的指针。
注意:要求dest字符串长度要大于或等于src长度,否则会越界。复制时会将src的结束符‘\0‘也复制到dest中。
测试:
int main(){ char s1[]="1234567"; char s2[]="abcd"; cout<<strcpy(s1,s2)<<endl<<s1[6]; } //输出如下 abcd 7
这说明了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(表达式)",当表达式为假时强行中止程序,并给出错误提示。需要头文件#include <cassert> while这一行程序也可以这么写: while(*src!=‘\0‘){ //相当于while(*src) *dest++=*src++; } *dest=‘\0‘; //在目标字符串结尾加结束符
函数原型: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<<strncpy(s1,s2,4)<<endl; } //输出如下 abcd5678 测试2: int main(){ char s1[]="12345678"; char s2[]="abcd"; cout<<strncpy(s1,s2,5)<<endl; } //输出如下 abcd
测试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; }
char d[20]="Golden"; char s[20]="View"; strcat(d,s); //打印d printf("%s",d);
strcat函数实现:
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; }
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比较。
strlen所作的仅仅是一个计数器的工作
它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描
直到碰到第一个字符串结束符‘\0‘为止,然后返回计数器值。
实现如下:
int mystrlen(const char *str){ int count=0; while(*str!=‘\0‘){ str++; count++; } return count; }
strchr是计算机编程语言的一个函数
原型为extern char *strchr(const char *s,char c)
可以查找字符串s中首次出现字符c的位置。
测试:
char s1[100]="12345678"; cout<<strchr(s1,‘4‘)<<endl; //output 45678
返回的是指向所给字符的指针
strchr函数实现:
char *mystrchr(char *str, int c){ assert(str!=NULL); while(*str++!=‘\0‘){ if(*str==(char)c) return str; } return NULL; }
函数功能:strpbrk是在源字符串(s1)中找出最先含有搜索字符串(s2)中任一字符的位置并返回,若找不到则返回空指针。
测试:
char s1[100]="12345678"; char s2[]="002001"; cout<<strpbrk(s1,s2)<<endl; //output 12345678 char s1[100]="12345678"; char s2[]="00200"; cout<<strpbrk(s1,s2)<<endl; //output 2345678
strpbrk函数实现:
char *mystrpbrk(char *str1, char *str2){ while(*str1!=‘\0‘){ if(strchr(str2,*str1)!=NULL) return str1; str1++; } return NULL; }
以上就是我近期以来对字符串函数使用的一些整理及归纳。参考了CSDN及博客园的一些相关文章,并从中学到了许多。希望能和大家一起分享学习。
原文:https://www.cnblogs.com/sherlock77/p/10809455.html