C语言中的自定义反向和strlen函数

时间:2017-11-23 14:21:03

标签: c

我的任务是 实现函数反转。实现函数时,禁止使用C语言库的功能。 有人可以帮我实现功能strlen吗?

我的功能:

void revstr( char * str){
    int i, len = 0;

    len = strlen(str);

    for (i = 0; i <= len / 2; i++){
        *(str + len - i) = *(str + i);  
        *(str + i) = *(str + len - i - 1);
    } 


    for (i = len / 2; i <= len; i++)
        *(str + i) = *(str + i + 1);

}

3 个答案:

答案 0 :(得分:3)

strlen返回字符串的长度。因此,您可以遍历整个字符串,递增计数器并将计数器作为长度

返回

代码:

size_t my_strlen(char *str) {
    size_t i;
    for (i = 0; str[i] != '\0'; i++) 
        ;
    return i;
}

编辑:

您的revstr代码看起来非常复杂。这是一种简单的方法。

char * revstr( char * str)
{
    int i,end,len;
    char temp;

    len= my_strlen(str);
    end = len-1;
    for(i=0;i<len/2;i++)
    {
       temp=str[i];
       str[i]=str[end];
       str[end--]=temp;
    }

    return str;
}

注意:优良作法是编写str[i]而不是*(str + i)。 并且代码适合您的问题:)

答案 1 :(得分:1)

我不认为“禁止”使用标准库函数,使用strlen()这里很好。他们不需要自己写。至于你的反向功能,我建议你解决这个问题。

一个简单的方法是有两个计数器,一个从字符串的开头开始,一个从字符串的结尾开始。您需要交换这些字符,可以这样做:

void swap(char *a, char *b) {
    char temp = *a;
    *a = *b;
    *b = temp;
}

交换这些开始和结束字符后,递增起始计数器并递减结束计数器以向内移动字符串,然后再次交换。这可以用简单的循环编写:

for (start = 0, end = len-1; start <= end; start++, end--) {
    swap(&string[start], &string[end]);
}

我会让你填写剩下的代码,但这给出了一般的想法。

答案 2 :(得分:1)

我这样做:

void revstr(char *str)
{
    char *s = str;
    char *e;

    for (e=s; *e; ++e); //find the end

    if (e==s)
        return; //empty string

    for (--e; e>s; --e,++s)
    {
        char t = *s;
        *s = *e;
        *e = t;
    }
}