7.C语言之字符串操作函数
来源:互联网 发布:大学生借款软件 编辑:程序博客网 时间:2024/06/14 16:10
在这一节,我想主要来介绍一下C语言操作字符串的常用函数。
C语言的字符串函数的原型都驻留在<string.h>头文件中,因此我们在处理字符串时,需要引入这个头文件。
但是,我不希望只是单纯地介绍每个函数的用法,如果那样,看API就可以了,我希望在介绍每个函数时都自己来实现一次。
1. strcpy函数
string copy,我们先来看一下该函数的用法。
#include<stdio.h>#include<string.h>int main(){ char *str1="abcd"; char str2[5]; strcpy(str2,str1); printf("%s",str2); return 0;}
在上段代码中,我们注意,str2的字符串长度应该是5,也就是strlen(“abcd”)加上’\0’。在上面的代码中,我们将str1的字符串复制到了str2中。
我们也来看下,这两段代码的区别:
#include<stdio.h>#include<string.h>int main(){ char str1[5]="abcd"; char str2[5]; char *str3=str1; strcpy(str2,str1); str1[1]='t'; printf("str2:%s\n",str2); printf("str3:%s",str3); return 0;}
我们对比结果可以发现他们的不同,在这里,我们不妨回头想想Java/C#的深复制和浅复制。
当我们修改第一段代码为这样时会发现错误:
#include<stdio.h>#include<string.h>int main(){ char str1[5]="abcd"; char str2[3]; strcpy(str2,str1); str1[1]='t'; printf("str2:%s\n",str2); return 0;}
错误的原因就是,str2不足以容纳下str1的字符串,也就是说strcpy我们没有足够的控制权,那么我们就可以来采用strncpy的方法来实现:
#include<stdio.h>#include<string.h>int main(){ char str1[5]="abcd"; char str2[3]; strncpy(str2,str1,sizeof(str2)-1); str2[sizeof(str2)-1]='\0'; printf("str2:%s\n",str2); return 0;}
这个方法就不多说了,就是加上了一个长度控制,接下来我们来试着实现一下简单的strcpy函数。
#include<stdio.h>#include<string.h>char *mycopy(char *,const char *);int main(){ char str1[5]="abcd"; char str2[5]; mycopy(str2,str1); printf("%s",str2); return 0;}char *mycopy(char *strDest,const char *strSource){ char *temp=strDest; while(*temp++=*strSource++) ; return strDest;}
同理,我们也可以写出strncpy的代码:
char *mycopy(char *strDest,const char *strSource,int size){ char *temp=strDest; int i =0; while(i<size) { *temp++=*strSource++; i++; } *temp='\0'; return strDest;}
2. 再谈字符串的问题
其实我之前一直都没有想懂关于字符串中修改某一字符的问题,我一直很困扰这样一个问题:
我收回在上一节中说的观点,其实字符串是否能修改取决的是这段字符串是否位于常量区。
3. strlen函数
这个很简单,实现一下:
size_t mylength(char * str){ int count=0; while(*str++) { count++; } return (size_t)count;}
但是如果这样来写,每次当指针前移的时候,都需要进行一次加法操作,会对效率造成一定的影响,我们可以这样来写:
size_t mylength(char * str){ char *temp=str; while(*temp++) ; return (size_t)(temp-str-1);}
4. strcmp函数
字符串比较函数:
int mycompare(const char *str1,const char *str2){ while(*str1==*str2) { if(*str1=='\0') { return 0; } str1++; str2++; } return *str1>*str2?1:-1;}
- 7.C语言之字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- C语言 字符串操作函数
- C语言字符串操作函数
- c语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- c语言字符串操作函数
- C语言字符串操作函数
- C语言字符串操作函数
- c语言字符串操作函数
- Android 系统时间日期的获取
- 在struts中的Action方法中,调用request.getInputStream() 发现无法读到任何数据
- Nginx 启动、停止、平滑重启
- MonetDB——集群
- AOJ 2308 —— 计算几何
- 7.C语言之字符串操作函数
- win7出现任务栏不见了,各个进程莫名被终止解决办法
- 让TOMCAT支持软连接
- JAVA网页浏览器
- MySQL SQL 分析 - 参数化查询 vs query cache 功能
- MSP430F5438 ADC12学习笔记
- UITableView获取cell的row值(解决自定义cell里的button通过点击无法获得cell的indexpath的问题)
- linux下安装protobuf教程+示例
- xml文件解析,同步xml文件描述的文件