1. 程式人生 > >C 標準字串函式的自實現

C 標準字串函式的自實現

文章目錄

說明


標準字串:以 ‘\0’ 作為字串的結束符

不使用 C/C++ 庫函式,程式設計實現以下函式功能

  • int strcmp( char * str1, char * str2 );
  • char * strcpy( char * str1, char * str2 );
  • char * strcat( char * str1, char * str2 );
  • int strlen( char * str );
  • char * strstr( char * str1, char * str2 );

以上函式只能處理標準字串!!!

strcmp()


int mystrcmp(const char *str1,const char *str2)
{
	if(str1==NULL || str2==NULL)
	{
		printf("The string is error!\n");		/*非法的字串比較,程式終止*/
		exit(0);
	}
	while(*str1!='\0' && *str2!='\0'
&& *str1 == *str2) { str1++; /*將兩個字串從頭開始逐個字元進行比較*/ str2++; } if(*str1 != '\0' && *str2 == '\0') { return 1; /*字串str2已經比較到了結尾,而字串str1還沒有到結尾*/ } else if(*str1 == '\0' && *str2 != '\0') { return -1; /*字串str1已到結尾,而字串str2還沒有到結尾*/ } else if(*str1 > *str2) { return
1; /*字串str1中的字元大於str2中的字元*/ } else if(*str1 < *str2) { return -1; /*字串str1中的字元小於str2中的字元*/ } return 0; /*字串相等,返回0*/ }

strcpy()


char *mystrcpy(char *str1, const char *str2) {
    char *p = str1;
    if(p == NULL || str2 == NULL) {
        printf("The string is error!\n");  /*非法的字串拷貝*/
        exit(0);
    }
    while(*str2 != '\0') {           /*實現字串的拷貝*/
        *p = *str2;
        p++;
        str2++;
    }
    *p = '\0';                      /*向字串str1中新增結束標誌*/
    return str1;                    /*返回目的字串的頭指標*/
}

strcat()


char *mystrcat(char *dst, const char *src) {
    assert(dst != NULL && src != NULL);
    char *temp = dst;
    while (*temp != '\0')
        temp++;
    while ((*temp++ = *src++) != '\0');
    return dst;
}

strlen()


int mystrlen(const char *str) {
    int i;
    i = 0;
    while((*str++) != '\0') {
        i++;
    }
    return i;
}

strstr()


char *mystrstr(const char *str1, const char *str2) {
    char *src, *sub;

    if(str1 == NULL || str2 == NULL) {
        printf("The string is error!\n");
        exit(0);
    }
    while(*str1 != '\0') {
        src = str1;
        sub = str2;
        do {
            if(*sub == '\0') {
                return str1;            /*找到子串*/
            }
        } while(*src++ == *sub++);
        str1++;
    }
    return NULL;
}