字符串2函数.docx

上传人:b****6 文档编号:6776974 上传时间:2023-01-10 格式:DOCX 页数:4 大小:19.36KB
下载 相关 举报
字符串2函数.docx_第1页
第1页 / 共4页
字符串2函数.docx_第2页
第2页 / 共4页
字符串2函数.docx_第3页
第3页 / 共4页
字符串2函数.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

字符串2函数.docx

《字符串2函数.docx》由会员分享,可在线阅读,更多相关《字符串2函数.docx(4页珍藏版)》请在冰豆网上搜索。

字符串2函数.docx

字符串2函数

字符串的应用===================================

1.求字符串长度

/*strlen();原型:

unsignedintstrlen(char*s);头文件:

string.h格式:

strlen(字符数组名)功能:

计算字符串s的(unsignedint型)长度,不包括'\0'在内(有效长度)说明:

返回s的长度,不包括结束符'\0'.注:

从传入的地址开始统计字符个数直到遇到'\0'结束统计且统计结果不包括'\0';*/#import//for循环+数组的方式unsignedlongmyStrlen(constchar*s);unsignedlongmyStrlen(constchar*s){unsignedlongcount=0;//定义一个变量//用for循环来遍历数组元素统计'\0'之前的字符for(inti=0;s[i]!

='\0';i++){count++;}returncount;}//while循环+指针的方式unsignedlongmyStrlen2(constchar*s);unsignedlongmyStrlen2(constchar*s){unsignedlongcount=0;//第一种while循环//while(*s!

='\0'){//count++;//统计//s++;//指针后移,循环继续直到字符'\0'结束//}//第二种while循环while(*s++){count++;}returncount;}intmain(intargc,constchar*argv[]){printf("字符长度为:

%ld\n",myStrlen("wuchen"));//for循环调用函数printf("字符长度为:

%ld\n",myStrlen2("wuchen"));//while循环调用函数return0;}

============================================

2.Atoi函数

/*原型:

intatoi(constchar*s);功能:

把字符转换为长整型数说明:

atoi将第一个字符串转换为一个整数,从最前面开始,如果有空格,则跳过空格,直到第一个非空字符,开始转换如果第一个字符是"+或"-"则会转换为正/负数(正号不输出,符号输出);如果数字字符串中间有字母,则整个字符串只转换为字母前面的数字字符串,并结束转换*/#import//for循环+数组形式intmyAtoi(constchar*s);intmyAtoi(constchar*s){inti;intflag=1;//做标记如果值为1则它是一个正数//先判断字符串前面是否有空格如果有则跳过for(i=0;s[i]=='';i++);//先判断第一个字符是'+'或'-'if((s[i]=='+')||(s[i]=='-')){if(s[i]=='+'){flag=1;//表示正数}else{flag=-1;//表示负数}i++;}//转换的过程inttmp;//接受被转换的字符intsum=0;//累和for(;s[i]!

='0';i++){if(s[i]>='0'&&s[i]<='9'){tmp=s[i]-'0';//将字符串转化为数字sum=sum*10+tmp;//累加求和}else{break;//遇到非数字字符则停止转化}}returnsum*flag;//和带上正负号}intmyAtoi2(constchar*s);intmyAtoi2(constchar*s){//先判断字符串前面是否有空格如果有则跳过while(*s==''){//*s表示的是指针的值s表示的是指针s++;}intflag=1;//1表示正数//判断第一个字符是‘+’或‘-’if((*s=='+')||(*s=='-')){if(*s=='+'){flag=1;//表示正数}else{flag=-1;//表示负数}s++;}//转化过程inttmp;intsum=0;while(*s!

='\0'){if((*s>='0')&&(*s<='9')){//如果字符是0~9之间的数则转化tmp=*s-'0';//将字符串转化为数字字符sum=sum*10+tmp;//累和s++;//指针加加后移}else{break;//如果是非数字字符则停止转换此时sum还是初始值0}}returnsum*flag;}intmain(void){printf("==============myAtoi============\n");printf("%d\n",myAtoi("+123"));//123printf("%d\n",myAtoi("-123"));//-123printf("%d\n",myAtoi("123"));//123printf("%d\n",myAtoi("123"));//123printf("%d\n",myAtoi("+-123"));//0printf("%d\n",myAtoi("+123-123"));//123printf("%d\n",myAtoi("+1230"));//123printf("%d\n",myAtoi("a123"));//0printf("%d\n",myAtoi("123a"));//123printf("%d\n",myAtoi("123a123"));//123printf("==============myAtoi2============\n");printf("%d\n",myAtoi2("+123"));//123printf("%d\n",myAtoi2("-123"));//-123printf("%d\n",myAtoi2("123"));//123printf("%d\n",myAtoi2("123"));//123printf("%d\n",myAtoi2("+-123"));//0printf("%d\n",myAtoi2("+123-123"));//123printf("%d\n",myAtoi2("+1230"));//123printf("%d\n",myAtoi2("a123"));//0printf("%d\n",myAtoi2("123a"));//123printf("%d\n",myAtoi2("123a123"));//123printf("=================================\n");}

============================================

3.字符串拷贝strcpy

/*strcpy原型:

char*strcpy(char*dest,constchar*src);头文件:

#include功能:

把src地址开始且含有NULL结束符的字符串复制到dest开始的地址空间说明:

1.输入src和dest所指内存区域不可以重叠2.dest要保证有足够的空间来容纳src的字符串3.返回指向dest指针*/#import//方法一用for循环和数组的方式char*myStrcpy(char*dest,constchar*src);char*myStrcpy(char*dest,constchar*src){inti;//for循环里面遍历,逐个将src源字符串里面的字符拷贝到目的字符串里面去for(i=0;src[i];i++){dest[i]=src[i];}returndest;//返回dest即目的字符串的地址}//方法二用while循环和指针的形式char*myStrcpy2(char*dest,constchar*src);char*myStrcpy2(char*dest,constchar*src){char*save=dest;#if0while(*src!

='\0'){*dest=*src;dest++;src++;}#endif#if0//while((*dest++=*src++)!

='\0');////*dest='\0';//手动在拷贝后的目的字符串后添加一个'\0'作为结束符#endif//断言源字符串和目的字符串都不为空NULLassert((dest!

=NULL)&&(src!

=NULL));//assert断言char*address=dest;//新定义一个指针指向destwhile((*dest++=*src++)!

='\0'){}returnaddress;//引用返回地址实现链式操作//returnsave;}intmain(intargc,constchar*argv[]){charbuff[1024]={};printf("-----------myStrcpy---------------\n");printf("拷贝前的buff:

%s\n",buff);printf("%s\n",myStrcpy(buff,"dfgadvadsadfgdfegrgdfbdvdsvdd"));printf("%s\n",myStrcpy2(buff,"dfgadvadsadfgdfegrgdfbdvdsvdd"));printf("拷贝后的buff:

%s\n",buff);return0;}

============================================

4.字符串拼接strcat

/*#import//方法一:

用for循环和数组:

char*myStrcat(char*dest,char*src);char*myStrcat(char*dest,char*src){inti;for(i=0;dest[i]!

='\0';i++);//以分号结尾它是一个完整地C语句intj;//拷贝--》把src的内容加到dest后面去for(j=0;src[j]!

='\0';j++){dest[i+j]=src[j];//将源字符串的字符渚个拷打目的字符串}dest[i+j]='\0';returndest;//返回到dest的首地址}intmain(intargc,constchar*argv[]){charbuff[1024]="wuchen";char*ret=myStrcat(buff,"zhengcong");printf("%s\n",ret);return0;}*///方法二while循环+指针#include#includechar*myStrcat(char*dest,char*src);//函数声明char*myStrcat(char*dest,char*src){//函数实现char*address=dest;//定义一个address的指针指向dest//找到dest字符串的结尾处'\0'/*while(*dest){*dest!

='\0'dest++;}*///上述代码可以用以下实现dest=dest+strlen(dest);//dest的首地址+dest的有效长度while((*dest++=*src++));//循环拷贝将源字符串里面的内容拷贝到目的字符串里面去returnaddress;}intmain(intargc,constchar*argv[]){charbuff[1024]="wuchenlove";char*ret=myStrcat(buff,"zhengcong");printf("%s\n",ret);return0;}

============================================

5.字符串比较函数strcmp

/*strcmp函数原型:

intstrcmp(constchar*s1,constchar*s2);头文件:

比较字符串s1和s2.一般形式:

strcmp(字符串1,字符串2)说明:

当s1s2时,返回值为正数即:

两个字符串自左向右逐个字符比较(按ASCII值大小比较),直到出现不同的字符或者遇到'\0'停止特别注意:

intstrcmp(constchar*s1,constchar*s2)';只里面只能比较字符串,不能比较数字等其它形式的参数;注:

strcmp函数实际上是对字符的ASCII码比较,实现原理如下:

首先比较两个字符串的第一个字符,如不相等,则停止比较,并得出两个ASCII大小比较结果;如果相等,就接着比较第二字符然后是第三字符等。

无论两个字符串怎么样,strcmp函数最多比较到其中一个字符串遇到结束符'\0'为止,就能得出结果!

*//*#import//方法一for循环和数组:

intmyStrcmp(constchar*s1,constchar*s2);intmyStrcmp(constchar*s1,constchar*s2){inti,j;for(i=0;(s1[i]!

='0')&&(s2[i]!

='0');i++);for(j=0;j

=s2[j]){break;}}return(s1[j]-s2[j]);}intmain(intargc,constchar*argv[]){char*p="wuchen";char*q="zhengcong";printf("%d\n",myStrcmp(p,q));return0;}*//*#import//方法一for循环和数组:

intmyStrcmp(constchar*s1,constchar*s2);intmyStrcmp(constchar*s1,constchar*s2){inti;for(i=0;s1[i]!

='\0'&&s2[i]!

='\0';i++){if(s1[i]==s2[i]){//如果相等,则继续比较continue;//继续循环}else{break;//如果不相等,则跳出循环}}return(s1[i]-s2[i]);}intmain(void){printf("----------myStrcmp-----------\n");char*p="hefei";charch[10]="beijing";printf("比较结果为:

%d\n",myStrcmp(p,ch));printf("----------myStrcmp-----------\n");}*///方法二while循环和指针:

#include#includeintmyStrcmp2(constchar*s1,constchar*s2);intmyStrcmp2(constchar*s1,constchar*s2){while(*s1!

='\0'&&*s2!

='\0'){if(*s1!

=*s2){//如果相等则继续比较break;//如果不相等退出循环}s1++;//指针s1往后移s2++;//指针s2往后移}return(*s1-*s2);//如果不相等返回差值}intmain(void){printf("-----------myStrcmp2-----------\n");char*p="hefei";charch[10]="beijing";printf("比较结果为:

%d\n",myStrcmp2(p,ch));printf("-----------myStrcmp2-----------\n");return0;}

============================================

6.字符串查找

/*strstr原型:

char*strstr(constchar*s1,constchar*s2);s1:

被查找目标s2:

要查找的对象返回值:

strstr函数返回s2第一次在s1中的位置,如果没有找到就返回NULL注:

字符串查找,查找后面的子串在前面长串中的位置,找到之后,返回子串在长串中的位置(从前往后找第一个出现的位置)找不到子串那么就返回NULL(0);*//*#import//方法一:

for循环和数组:

char*myStrstr(constchar*s1,constchar*s2);char*myStrstr(constchar*s1,constchar*s2){inti,j;if(strlen(s1)

='\0';i++){j=0;if(s1[i]==s2[j]){//当s2里面某个字符和s1里面某个字符相等的时候//判断子串到'\0'前的字符for(j=1;s2[j]!

='\0';j++){if(s1[i+j]==s2[j]){//如果s2里面的字符和s1里面某个字符的下个字符也相等的时候continue;//继续}else{break;//退出循环}}if(s2[j]=='\0'){//在循环里面s2[j]=='\0',说明s2已经到字符串末尾了break;//已经找到了退出}}}if(s1[i]=='\0'){//在循环里面returnNULL;//返回NULL空}else{return(char*)&s1[i];//返回s1的首地址}}intmain(intargc,constchar*argv[]){charbuff[1024]="woxihuanzhengcong";char*ret=myStrstr(buff,"xihuan");printf("%s\n",ret);return0;}*///while循环和指针//方法二while和指针的形式char*myStrstr2(constchar*s1,constchar*s2);char*myStrstr2(constchar*s1,constchar*s2){//排错处理if(strlen(s1)

='\0'constchar*tmp=s2;//新定义一个指针tmp指向s2if(*s1==*tmp){//如果tmp里面第一个元素和s1里面的某个元素相等inti=1;tmp++;//指针后移继续比对while(*tmp){//*tmp!

='\0'if(*(s1+i)==*tmp){//如果tmp后移的下一个元素和*(s1+i)的元素相等tmp++;//指针继续后移i++;//s1的元素也往后查找continue;//继续}else{break;//r如果不相等则退出}}if(*tmp=='\0'){//如果tmp查找到最后则退出break;}}s1++;//指针s1继续往后找下一个元素}//s1if(*s1!

='\0'){return(char*)s1;}elsereturnNULL;}intmain(intargc,constchar*argv[]){charbuff[1024]="wuchen";char*ret=myStrstr2(buff,"wkk");printf("%s\n",ret);printf("%s\n",myStrstr2(buff,"wu"));return0;}

2014年08月25日,今天学习了字符串函数的由来,从利用系统函数到自己封装的函数。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1