您的位置:首页 > 其它

c笔记——字符串处理

2014-06-26 16:18 92 查看
涉及一些常用的字符串处理函数的特点和用法;

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
//1.复制函数
//所有的复制函数返回值为第一个参数,即目的指针;
//memcpy从源向目的复制n个字符(第三个参数),如过源和目的内存有重叠,行为未定义
//memmove与memcpy功能一样,区别:当源和目的重叠时可以正常工作
//strcpy 将一个以空字符结尾的字符串从源复制到目的(必须有空字符,否则会持续复制)
//strncpy 与strcpy类似,不会复制多于n个字符(第三个参数),如果n太小,可能无法复制源结尾的空字符;如果遇到源字符中
//的空字符,会向目的不断追加空字符,直到写满n个为止。strcpy和strncpy在有内存重叠的情况下未定义
char *des=(char*)malloc(10);
des[9]='\0';//如果des[9]不赋0,strlen(des)不等于9
char *src="davemustbeaboy!";
memcpy(des,src,strlen(des));
printf("%s\n",des);//des is :davemustb\0
memmove(des,src,strlen(des));

//一个例子说明一切
char source[]={'z','h','a','\0','o','d','a'};
char dest[7];
memcpy(dest,source,3);//z,h,a
memcpy(des,source,4);//z,h,a,\0
memcpy(des,source,7);//z,h,z,\0,o,d,a

memmove(dest,source,3);//z,h,a
memmove(des,source,4);//z,h,a,\0
memmove(des,source,7);//z,h,a,\0,o,d,a

strcpy(des,source);//z,h,a

strncpy(des,source,3);//z,h,a
strncpy(des,source,4);//z,h,a,\0
strncpy(des,source,7);//z,h,z,\0,\0,\0,\0

/***************************************/
//2.拼接函数
//strcat将第二个参数追加到第一个参数的末尾,两个参数都必须是空字符结尾的字符串
//strncat有第三个参数限制复制字符的个数
char des1[9]="zhao";
char *src1="dawei";//这两种定义有本质的不同,前者是字符数组用常量来初始化,后者是一个指向字符串常量的指针
//des1[8]='a';
//src1[2]='i';//前者可操作,而后者不可以,因为src1指向只读存储区

//strcat(des1,src1);
printf("%p\n",strncat(des1,src1,4));//这里输出的是des1的地址

/***************************************/
//3、比较函数
//memcmp();strcmp();strncmp() 前两个参数都是要比较字符串的指针,memcmp()和strncmp()有第三个参数n,指定要比较的个数
//memcmp和strncmp不同之处在于前者不关心空字符,而后者遇到空字符或者比较到n个就停止比较;
//strcmp当任意一个字符串结束时,停止比较(被比较的字符串要有结束符)
//例子:
char s1[]={'b','i','g','\0','c','a','t'};
char s2[]={'b','i','g','\0','c','a','r'};
int n=sizeof(s1);//n=7
int m=strlen(s1);//m=3,strlen遇到\0就停止计算
printf("%s\n",s1);//printf也是,输出为big

printf("%d\n",memcmp(s1,s2,3));//0
printf("%d\n",memcmp(s1,s2,4));//0
printf("%d\n",memcmp(s1,s2,7));//1 忽略中间的'\0','t'>'r',s1>s2

printf("%d\n",strcmp(s1,s2));//0  比较到'\0'就结束,所以相等

printf("%d\n",strncmp(s1,s2,3));//0
printf("%d\n",strncmp(s1,s2,4));//0
printf("%d\n",strncmp(s1,s2,7));//0 比较到'\0'结束

/***************************************/
//3.查找函数
//strchr 在有空字符结尾的字符串中搜索指定字符(如果确定字符在字符串中,字符串可以不用\0结束)
//memchr 搜索内存块指定范围内存区域,不需要以空字符结束
//strrchr 和strchr类似,但反向搜索
//其他的一些搜索函数不多做解释

char *p;
char sch[]="davemustbeaboy";
char memch[14]={'d','a','v','e','m','u','s','t','b','e','a','b','o','y'};
p=strchr(sch,'a');//p指向第一个'a'字符
p=strchr(p+1,'a');//p指向第二个'a'字符

p=(char*)memchr(memch,'a',sizeof(memch));

//4.其他函数(非标准库)
strrev(sch);//反转
strset(sch,'a');//填充
strlwr(sch);//大写字母转换成小写字母,其他不变
stricmp(s1,s2);//不考虑大小写的 strcmp
char *cp=strdup(sch);//相当于malloc一个区域,存储sch,cp指向该区域
printf("%s",cp);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: