尝试定义函数以反转字符串

时间:2018-07-05 13:15:54

标签: c

我编写了此函数来反转C中的字符串,但是它不起作用。

#define         MAXSIZE         30

char buffer[MAXSIZE] = "hello";
int main(void)
{
    strrev(buffer);
    printf("%s",buffer);
    return 0;
}

void strrev(char *s)
{
    char c = 0;
    char *ptr = s;
    while(*s)
        s++;
    char *f = s;
    while(ptr != f);
    {
        c = *ptr;
        *ptr = *s;
        *s = c;
        s--;
        ptr++;
    }
}

我找不到该代码有什么问题

3 个答案:

答案 0 :(得分:1)

  1. s--;之后添加while(*s) s++;。这是因为* s在循环后将为'\ 0'。
  2. 在下一个while循环中删除分号。

答案 1 :(得分:1)

您的功能很少出现问题。

1)while(*s) s++;     移动指针s指向\0。因此,您需要通过执行\0

来指向f=s-1;之前的字符

2)删除while(ptr != f)末尾的分号,并且如果buffer中还有一个多余的字符,则条件不起作用,因此将其更改为while(ptr < f)

3)您应将*ptr = *s; *s = c; s--;替换为*ptr = *f; *f = c; f--;

答案 2 :(得分:1)

您的程序中有很多错误:-

  • 调用该函数之前,您应该拥有function prototype
  • while(*s)应该是while (*(s+1) != '\0'),直到您到达最后一个字符为止。
  • while(ptr != f);应该是while (ptr <= s),您不需要;,只需要将字符交换到ptr <= s

修改后的代码:-

#include <stdio.h>
#define MAXSIZE 30

char buffer[MAXSIZE] = "hello";

void strrev(char *s); // function prototype

int main(void)
{
    strrev(buffer);
    printf("%s", buffer);
    return 0;
}

void strrev(char *s)
{

    char c = 0;
    char *ptr = s;
    while (*(s + 1) != '\0')
    {
        s++;
    }
    char *f = s;
    while (ptr <= s)
    {
        c = *ptr;
        *ptr = *s;
        *s = c;
        s--;
        ptr++;
    }
}

输出 (gcc):-

olleh