Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用递归反转String-C_C - Fatal编程技术网

使用递归反转String-C

使用递归反转String-C,c,C,我不知道我是否只是不理解数组或是什么,但在过去的几个小时里,我一直在寻找这段代码中的问题。当我运行它时,我得到一个无限的返回循环 代码如下: #include <stdio.h> #include <string.h> void reverse(char string2Reverse[80], int start, int end); int main(int argc, char *argv[]) { char string[80]; int cn

我不知道我是否只是不理解数组或是什么,但在过去的几个小时里,我一直在寻找这段代码中的问题。当我运行它时,我得到一个无限的返回循环

代码如下:

#include <stdio.h>
#include <string.h>

void reverse(char string2Reverse[80], int start, int end);

int main(int argc, char *argv[])
{
    char string[80];

    int cntr;
    for(cntr = 0; cntr < 80; cntr++)
        string[cntr] = '\0';

    int start = 0, end;

    while((scanf("s", string)) != EOF)
    {
    end = 0;
    printf("%s ", string);

    while(string[end] != '\0')
        end++;

    end--;
    reverse(string, start, end);
    end++;
    printf("%s\n\n", string);

    for(cntr = 0; cntr < end; cntr++)
        string[cntr] = '\0';
    }
}

void reverse(char string2Reverse[80], int start, int end)
{
    if(string2Reverse[start] != string2Reverse[end] && start != end)
    {
    char temp = string2Reverse[start];
    string2Reverse[start] = string2Reverse[end];
    string2Reverse[end] = temp;
    reverse(string2Reverse, start + 1, end - 1);
    }
}
#包括
#包括
无效反转(字符string2Reverse[80],整数开始,整数结束);
int main(int argc,char*argv[])
{
字符串[80];
int-cntr;
对于(cntr=0;cntr<80;cntr++)
字符串[cntr]='\0';
int start=0,结束;
while((scanf(“s”,string))!=EOF)
{
结束=0;
printf(“%s”,字符串);
while(字符串[结束]!='\0')
end++;
结束--;
反向(字符串、开始、结束);
end++;
printf(“%s\n\n”,字符串);
对于(cntr=0;cntr

任何帮助都会很棒!我似乎找不到我的问题。

scanf
读取字符串的格式是
%s
,您似乎缺少百分号。

scanf
读取字符串的格式是
%s
,您似乎缺少百分号。

如果结束-开始不是偶数,您将无限循环,因为开始会!=永远结束。。我也不知道你是否真的想比较
string2Reverse[start]!=string2Reverse[end]
类似于此,这意味着如果字符串中有一个位置有一个“a”,并且在字符串另一侧的平衡位置也有一个“a”,它将终止。试试这个:

void reverse(char string2Reverse[80], int start, int end)
{
    if(start < end)
    {
    char temp = string2Reverse[start];
    string2Reverse[start] = string2Reverse[end];
    string2Reverse[end] = temp;
    reverse(string2Reverse, start + 1, end - 1);
    }
}
void reverse(字符string2Reverse[80],整数开始,整数结束)
{
如果(开始<结束)
{
char temp=string2Reverse[start];
string2Reverse[开始]=string2Reverse[结束];
String2反转[结束]=温度;
反向(String2反向,开始+1,结束-1);
}
}


正如其他人在这里指出的,在scanf中需要“%s”而不是“s”,现在之所以循环是因为end以-1开头(因为它是一个零len字符串),所以很明显start在增加,end在减少,所以终止条件永远不会满足。

如果end start不是偶数,您将无限循环,因为开始将!=永远结束。。我也不知道你是否真的想比较
string2Reverse[start]!=string2Reverse[end]
类似于此,这意味着如果字符串中有一个位置有一个“a”,并且在字符串另一侧的平衡位置也有一个“a”,它将终止。试试这个:

void reverse(char string2Reverse[80], int start, int end)
{
    if(start < end)
    {
    char temp = string2Reverse[start];
    string2Reverse[start] = string2Reverse[end];
    string2Reverse[end] = temp;
    reverse(string2Reverse, start + 1, end - 1);
    }
}
void reverse(字符string2Reverse[80],整数开始,整数结束)
{
如果(开始<结束)
{
char temp=string2Reverse[start];
string2Reverse[开始]=string2Reverse[结束];
String2反转[结束]=温度;
反向(String2反向,开始+1,结束-1);
}
}


正如其他人在这里指出的那样,在scanf中需要“%s”而不是“s”,现在之所以循环是因为end以-1开头(因为它是一个零len字符串),所以很明显start是递增的,end是递减的,所以终止条件永远不会满足。

while((scanf(“s”,string))!=EOF)
应该是
while((scanf(“%s”)和(&string))!=EOF)
不要忘记%和&。

while((scanf(“%s”,string))!=EOF)
应该是
while((scanf(“%s”)和(&string))!=EOF)
不要忘记%和&。

只提供显示问题所需的代码通常很有帮助。在这里,用常量替换输入是一个好主意,因为这会使自动验证更加困难。只提供显示问题所需的代码通常是有帮助的。在这里,用常量替换输入将是一个好主意,因为它使自动验证变得更加困难。