自定义实现字符串函数

//自主实现字符串函数
#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);
}

猜你喜欢

转载自www.cnblogs.com/luoxuw/p/11334601.html