库函数strlen、strcpy、strcat、strtr的实现
2016-03-21 20:23 Keiven_LY 阅读(752) 评论(0) 编辑 收藏 举报1、题目描述:实现一个函数,将字符串str2复制给字符串str1
方法一:使用库函数strcpy
#include<stdio.h> #include<stdlib.h> int main() { char strSrc[]="Hello Word!"; char strDest[20]; strcpy(strDest,strSrc); printf("strDest=%s\n",strDest); system("pause"); return 0; }
方法二:不允许使用库函数
#include<stdio.h> #include<stdlib.h> char *strcpy_new(char *strDest,const char *strSrc) //实现字符串strSrc到strDest的复制功能 { if((strDest==NULL)||(strSrc==NULL)) //判断参数strDest和strSrc的有效性 { return NULL; } while((*strDest++=*strSrc++)!='\0'); return strDest; //返回字符串strDest的首地址 } int main() { char strSrc[]="Hello Word!"; char strDest[20]; strcpy_new(strDest,strSrc); printf("strDest=%s\n",strDest); system("pause"); return 0; }
2、题目描述:实现一个函数,求字符串的长度
方法一:使用库函数strlen
#include<stdio.h> #include<stdlib.h> int main() { char strSrc[]="Hello World!"; printf("Length of strSrc is: %d\n",strlen(strSrc)); system("pause"); return 0; }
方法二:不允许使用库函数
#include<stdio.h> #include<stdlib.h> int strlen_new(const char *strSrc) //实现字符串strSrc到strDest的复制功能 { int len=0; if(strSrc==NULL) //判断参数strDest和strSrc的有效性 { return 0; } else { while(*strSrc++!='\0') len++; return len; } } int main() { char strSrc[]="Hello World!"; printf("Length of strSrc is: %d\n",strlen_new(strSrc)); system("pause"); return 0; }
3、题目描述:实现一个函数,将两个字符串相连接
方法一:使用库函数strcat
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *str1="Hello"; char *str2=" World!"; char *str3=NULL; str3=(char *)malloc(strlen(str1)+strlen(str2)+1); //加1是因为给字符串最后的结束符'\0'预留空间内存 str3[0]='\0'; strcat(str3,str1); strcat(str3,str2); printf("%s\n",str3); free(str3); str3=NULL; system("pause"); return 0; }
方法二:不允许使用库函数
#include <stdio.h> #include <stdlib.h> char *mystrcat(char *dest, char *strSrc) { char *temp; temp=dest; //保存目的字符串的首地址,作为返回值 while(*dest++); dest--; //此时dest指向字符串结束符 while(*dest++=*strSrc++);//循环复制 return temp; } int main() { char *str1="Hello"; char *str2=" World!"; char *str3=NULL; str3=(char *)malloc(strlen(str1)+strlen(str2)+1); //加1是因为给字符串最后的结束符'\0'预留空间内存 *str3='\0'; //为把目标字符串置为空,将结束符放在开头 mystrcat(mystrcat(str3,str1),str2); printf("%s\n",str3); free(str3); str3=NULL; system("pause"); return 0; }
4、题目描述:实现库函数strstr的功能
库函数strstr的函数原型是:char *strstr(char *str1,char *str2),
其中: str1: 被查找目标 str2: 要查找对象
该函数返回str2第一次在str1中的位置的指针,如果没有找到,返回NULL
方法一:使用库函数strstr
#include <iostream> #include <stdlib.h> using namespace std; int main() { const char *str1 = "JiangSu,University"; const char *str2 = "Un"; const char *res = strstr(str1, str2); if(res != NULL) cout<<"子串为:"<<res<<endl; else cout<<"NOT"<<endl; system("pause"); return 0; }
方法二:不允许使用库函数
#include <iostream> #include <stdlib.h> using namespace std; const char* StrStr(const char *str1, const char *str2) { const char *rp; const char *sp; if(str1==NULL || str2==NULL) { return NULL; } while(*str1) //与while(*str1!='\0')等价 { rp=str1; //使rp指向str1的首地址 sp=str2; //使sp指向str2的首地址 do { if(!*sp) //等价于:if(*sp=='\0') return str1; }while(*rp++==*sp++); str1++; } return NULL; } int main() { const char *str1 = "JiangSu,University"; const char *str2 = "Un"; const char *str3 = " "; const char *res1 = strstr(str1, str2); const char *res2 = strstr(str1, str3); if(res1!= NULL) cout<<"子串为:"<<res1<<endl; else cout<<"NOT"<<endl; if(res2!= NULL) cout<<"子串为:"<<res2<<endl; else cout<<"NOT"<<endl; system("pause"); return 0; }