自定义实现字符串函数

//自主实现字符串函数
strset(char * str, char c) #include <stdio.h> #include <stdlib.h> #include <string.h> ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void myStrrev(char *p){ //字符串逆转 int length = strlen(p); int tmp =0; for (int i = 0; i < length/2; ++i) { tmp = p[i]; p[i] =p[length-1-i]; p[length-1-i] = tmp; } } void main11(){ //字符串逆转 char str[18] ="China is great"; //strrev(str); myStrrev(str); printf("%s\n",str); // taerg si anihC } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //字符串大小写转换 void myStrupr(char *p){ while (*p != '\0'){ if(*p >='a' && *p <='z'){ *p = *p - 32; } p++; } } void myStrlwr(char *p){ while (*p != '\0'){ if(*p >='A' && *p <='Z'){ *p = *p + 32; } p++; } } void main12(){ //字符串大小写转换 char str[18] ="China is great"; //strupr(str); myStrupr(str); printf("%s\n",str); // CHINA IS GREAT //strlwr(str); myStrlwr(str); printf("%s\n",str); // china is great } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int myStrlen(char *p){ //求字符串长度 int i = 0; while (*p != '\0'){ p++; i++; } return i; } void main13(){ //求字符串长度 char str[18] ="China is great"; printf("%d\n",strlen(str)); // 14 printf("%d\n",myStrlen(str)); // 14 } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void myStrcpy(char *dest, char*source){ //求字符串拷贝 if(dest == NULL || source == NULL){ return; } else{ while (source != NULL){ *dest =*source; dest++; source++; } *dest = '\0'; //dest[0] = '\0'; } } void main14(){ //求字符串拷贝 char str1[18] ="China is great"; char str2[20]; //strcpy(str2,str1); myStrcpy(str2,str1); printf("%s\n",str2); //China is great } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void myStrcat(char *dest, char*source){ //求字符串连接 if(dest == NULL || source == NULL){ return; } else{ //char *p =(char *) realloc(dest,strlen(dest)+strlen(source)+1); int destLen = strlen(dest); dest = dest +destLen; while (*source != '\0'){ *dest =*source; dest++; source++; } *dest = '\0'; //dest[0] = '\0'; } } void main15(){ //求字符串连接 char str1[18] ="China is"; char str2[20] = " great"; //strcat(str1,str2); myStrcat(str1,str2); printf("%s\n",str1); //China is great } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// char * myStrchr(char *str, char ch){ //字符查找 while (*str !='\0'){ if(*str == ch){ return str; } str++; } return NULL; } void main16(){ //字符查找 char str[18] ="China is great"; char ch = 'a'; char *p = strchr(str,ch); //找到返回其位置,没有找到范返回NULL printf("%s\n",p); //a is great p = myStrchr(str,ch); printf("%s\n",p); //a is great } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int myStrcmp(char *str1, char *str2){ //字符比较 while (*str1 == *str2){ if(*str1 == '\0' && *str2 == '\0'){ return 0; } str1++; str2++; } return -1; } void main17(){ //字符比较 char *str1 ="China is great"; char *str2 ="China is great"; /* if(str1 == str2){ //C语言无法这样进行字符串比较,str1和str2都是地址 printf("equality"); }*/ if(strcmp(str1,str2) == 0){ printf("equality"); } if(myStrcmp(str1,str2) == 0){ printf("equality"); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// char * myStrstr(char *str1, char *str2){ //字符串的查找,也可以用下表法,数组的方式 char *p = str1; //指针初始化可以用 void *p; void类型的指针可以转换成任意类型 // char *p = (char *)p; char *str2Begin = str2; while (*str1 != '\0'){ p = str1; //为了保存,str2的第一个字符在str1中出现的位置,返回以后返回 str2 = str2Begin; // while (*str1 == *str2 || *str2 == '\0'){ //*str2 == '\0' 为了最后一位进行比较的数据,可以进入if判断,返回p,防止进入死循环 if(*str2 == '\0') { return p; } str2++; //str1和str2中第一个字符相等了就继续往后移动 str1++; } str1 =p; //千万别漏掉这一步,在与子串比较过程中,str1已经往后移动一大步 str1++; //主串中未找到就继续往后移动 } } void main(){ //字符串的查找 char *str1 ="Chiniiss is great"; char *str2="is"; char *p = strstr(str1,str2); printf("%s\n",p); char *myP= myStrstr(str1,str2); printf("%s\n",myP); }

 

posted @ 2019-08-11 12:39  Coding_Changes_LIfe  阅读(979)  评论(0编辑  收藏  举报