在C中编写一个名为reverse_str的函数,它接受一个char *参数并反转字符串

时间:2017-02-02 16:16:31

标签: c string

我是c程序的新手,我尝试按照以下指南尝试练习题。 在C中编写一个名为reverse_str的函数,它接受一个char *参数并将字符串反转到位。因此,如果str的值是:

char str[] = "Let's meet l8r 2nite?";

然后在调用 reverse_str 之后,str的值应为:

"?etin2 r8l teem s'teL"

请记住,您的函数应与此原型声明匹配:

void reverse_str(char *str);

说明:不要假设已包含除stdio.h之外的任何库或标头。仅使用标准C(特别是,不要使用任何Microsoft特定功能)。不要在功能中打印任何内容。您的提交应该只包含reverse_str函数而不包含任何其他内容(具体来说,不包括main函数)。

我在那个网站试过这个解决方案

void reverse_str(char* str)
{
    int i, slen = 0;
    while (str[slen] != '\0') 
    {
        slen++;
    }

    for (i = 0; i < (slen + 1) / 2; i++) 
    {
        str[i] += str[slen];
        str[slen] = str[i] - str[slen];
        str[i] = str[i] - str[slen--];
    }
}

但它给了我这种类型的消息

  

对不起。您的解决方案不正确。请再试一次。您的解决方案的反馈:

     

您的功能无法正常工作。请仔细检查以下内容:

     

您的函数是否产生问题中给出的输出?您应该将您的函数放在一个完整的程序中,编译并运行它并在提交之前对其进行测试。 (但只提交功能,而不是完整的程序。)

     

您的提交应该只包含函数,完整函数,而不包含其他额外代码。具体来说,它不应包含main函数或任何其他#included文件

     

确保您的提交不包含标准C库中未找到的任何功能。具体而言,请勿使用任何Microsoft特定功能。

     

不要包含conio.h,也不要使用像getch这样的函数。   确保您不打印任何东西。没有printf或putc或put。

你能告诉我什么是正确的解决方案

1 个答案:

答案 0 :(得分:1)

起初:.transform((Integer p) -> p * 2, c -> c.advice(this.expressionAdvice())) - 为什么i < (slen + 1) / 2?它应该只是+ 1,因为你需要迭代一半的字符串,如果字符串的长度是均匀的,而长度是奇数时需要半个1字符(中间的字符串不必与某些东西交换,因为它已经在它的位置 - 确切的中间位置。

现在关于i < (slen) / 2str[i] += str[slen];str[i] - str[slen]; - 在这里你减去了&#39;字符,因此结果无效。

你需要简单地交换这样的字符:

str[i] - str[slen--];