C 标准字符串函数的自实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34719188/article/details/83931301

说明


标准字符串:以 ‘\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;
}

猜你喜欢

转载自blog.csdn.net/qq_34719188/article/details/83931301