这是我的代码,我似乎无法弄清楚如何只使用数组作为参数来创建函数。
#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)
}
}
答案 0 :(得分:2)
一些观察和批评:
发布的代码不需要math.h
和stdlib.h
头文件。虽然char strArray[30]
足够大以容纳输入字符串,但最好在字符串初始值设定项中使用空括号,除非您需要大于初始字符串的特定大小。这不容易出错,而且更容易,因为不需要计算字符数,也不需要记住为null终止符包含空格。您可能希望在调用puts("");
之后移动stringReverse()
,因为此函数不会打印换行符。对于像这样的事情,使用putchar('\n');
似乎更好; putchar()
旨在只打印一个字符,因此该工作也是正确的工具。
似乎使用语句if (strArray != "\n") {}
,目标是检查第一个字符是否为换行符,但是存在一些问题。首先,"\n"
是一个字符串,而不是一个字符;接下来,strArray
是指向数组strArray[]
的第一个字符的指针,而不是第一个字符本身。输入字符串中没有'\n'
个字符,因此即使正确编写了这个条件,它也总是正确的,并且此代码将进入无限递归。最后,传递给stringReverse()
的参数永远不会改变,因此递归无法结束。为了使递归成功,必须收敛基础案例。
解决方案是将数组的第一个字符与'\0'
进行比较。如果第一个字符不是空终止符,则再次调用stringReverse()
函数,这次使用值strArray + 1
。程序将继续递归调用stringReverse()
,直到传入空字符串,此时对stringReverse()
的最终调用返回其调用者(之前调用stringReverse()
),其中最后一个调用在返回到调用者之前,打印字符串的字符....每个stringReverse()
帧都按照与调用它们相反的顺序返回,并且每个帧都打印出一个字符。 string,直到最后到达第一帧,然后打印第一个字符,然后返回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
答案 1 :(得分:0)
首先,您需要返回一个值。
然后,您的算法应该做什么?运行到字符串的最后一个,然后通过一个参数反向返回变量,你只需要在每个循环中更短地传递这个参数。
像这样:
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void stringReverse(char strArray[], int i) {
if (strArray[0] != NULL)
if (strArray[0] != '\0') {
int c = 0;
char str[30];
while (c < strlen(strArray)) {
str[c] = strArray[2 + c -1];
c++;
}
str[c] = '\0';
stringReverse(str);
}
printf("%c", strArray[0]);
}
int main(int argc, char *argv[]) {
char strArray[30] = "Print this string backward.";
stringReverse(strArray, 0);
printf("\n\n");
system("Pause");
return(0);
}