首页 / C++ / C/C++字符串使用整理
C/C++字符串使用整理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C/C++字符串使用整理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3915字,纯文字阅读大概需要6分钟。
内容图文
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<<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'; //在目标字符串结尾加结束符
- 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<<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; }
- 3、strcat
char d[20]="Golden"; char s[20]="View"; strcat(d,s); //打印d printf("%s",d);
输出 d 为 GoldenView (中间无空格) d和s所指内存区域不可以重叠且d必须有足够的空间来容纳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; }
- 4、strcmp
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(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; }
- 7、strpbrk
函数功能: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及博客园的一些相关文章,并从中学到了许多。希望能和大家一起分享学习。
内容总结
以上是互联网集市为您收集整理的C/C++字符串使用整理全部内容,希望文章能够帮你解决C/C++字符串使用整理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。