博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++字符串使用整理
阅读量:4358 次
发布时间:2019-06-07

本文共 2921 字,大约阅读时间需要 9 分钟。

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(表达式)",当表达式为假时强行中止程序,并给出错误提示。需要头文件#include 
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<
<

 

测试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
strcat的用法是将两个char类型连接。
char d[20]="Golden";char s[20]="View";strcat(d,s);//打印dprintf("%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
C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
matlab中函数,strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false。
 

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<
<

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

你可能感兴趣的文章
自己制作Linux镜像,CentOS 6.5 Docker自制CentOS镜像
查看>>
linux配置scp交互传输,Linux间传输文件的几种方法scp、sftp
查看>>
linux安装nginx映射目录,centos8自定义目录安装nginx(教程详解)
查看>>
linux cpu scheduler,A Temporal Partition-Based Linux CPU Scheduler
查看>>
c语言怎么写最小公倍数的函数,C语言 · 最小公倍数
查看>>
c语言中的头文件string.h的作用,C语言常用头文件及库函数——string.h
查看>>
c语言字符-1代表什么,玩儿转C语言:符号和字符(1)
查看>>
知道商洛学院c语言章节答案,C语言程序设计(商洛学院)知到章节答案
查看>>
c语言酒精检测仪程序代码,单片机酒精浓度测试仪,代码,原理图
查看>>
单路电压表c语言编程,单片机数字电压表的设计
查看>>
精通c语言的标准,《精通Unix下C语言编程与项目实践》之七——标准I/O重定向
查看>>
蓝桥杯c语言试题 高职,2011l蓝桥杯c语言高职真题附加答案2.doc
查看>>
c 语言 设计算法 例题,C语言程序设计例题.pdf
查看>>
p4 linux 命令行,《linux就该这么学》学习笔记25期2020-P4
查看>>
android9.0官方下载,安卓9.0系统刷机包 官方正式版
查看>>
android 模块封装,Android开发之针对联系人的封装
查看>>
android 构建期间错误,Android构建错误
查看>>
Android应用开发病虫害识别,基于Android平台的枣虫害识别系统的设计与实现
查看>>
织梦上传html文件,提高DedeCMS生成静态页html文件速度的方法
查看>>
html焦点自动轮播幻灯片js,js实现幻灯片轮播图
查看>>