gpt4 book ai didi

c - 在 C 中使用递归反转字符数组

转载 作者:行者123 更新时间:2023-11-30 18:48:20 25 4
gpt4 key购买 nike

这是我的代码,我似乎无法弄清楚如何仅使用数组作为参数来创建该函数。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

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

char strArray[30] = "Print this string backward.";

puts("");
stringReverse(strArray);

return(0);
}


void stringReverse(char strArray[])
{

if(strArray != "\n") {
stringReverse(&strArray)
printf("%s", strArray)
}
}

最佳答案

一些观察和批评:

math.hstdlib.h发布的代码不需要头文件。而char strArray[30]如果足够大以容纳输入字符串,则最好在字符串初始值设定项中使用空括号,除非您需要大于初始字符串的特定大小。这不太容易出错,而且更容易,因为不需要计算字符数,也不需要记住为空终止符包含空格。您可能想移动 puts("");调用stringReverse()后,因为此函数不打印换行符。通常使用 putchar('\n'); 似乎更好对于这样的事情; putchar()专为仅打印一个字符而设计,因此是适合这项工作的工具。

似乎用声明if (strArray != "\n") {}目标是检查第一个字符是否是换行符,但这存在一些问题。第一,"\n"是一个字符串,而不是一个字符;接下来,strArray是指向数组 strArray[] 第一个字符的指针,而不是第一个字符本身。没有'\n'输入字符串中的字符,因此即使正确编写了该条件,它也始终为真,并且该代码将进入无限递归。最后,参数传递给stringReverse()永远不会改变,因此递归无法结束。为了使递归成功,必须收敛到基本情况。

解决方案是将数组的第一个字符与 '\0' 进行比较。如果第一个字符不是空终止符,则 stringReverse()函数再次被调用,这次的值是 strArray + 1 。程序会继续递归调用stringReverse()直到传入一个空字符串,此时最终调用stringReverse()返回其调用者(之前对 stringReverse() 的调用),在返回其调用者之前,打印字符串的最后一个字符,....每个 stringReverse()帧以与调用它们相反的顺序返回,并且每个帧都打印字符串的一个字符,直到最后到达第一帧并打印第一个字符,然后返回 main() .

请注意,在函数调用中,实际上在大多数表达式中,数组会衰减为指向其第一个元素的指针。所以,在 stringReverse() strArray是指向 char 的指针指向调用者作为参数提供的数组的第一个元素。另请注意,在函数声明中,例如 void stringReverse(char strArray[])数组类型被调整为适当的指针类型,因此此声明相当于 void stringReverse(char *strArray) .

#include <stdio.h>

void stringReverse(char strArray[]);

int main(void)
{
char strArray[] = "Print this string backwards.";

stringReverse(strArray);
putchar('\n');

return 0;
}

void stringReverse(char strArray[])
{
if (*strArray != '\0') {
stringReverse(strArray + 1);
putchar(*strArray);
}
}

程序输出:

.sdrawkcab gnirts siht tnirP

关于c - 在 C 中使用递归反转字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com