这是我的代码,我似乎无法弄清楚如何仅用数组作为参数来制作函数。
#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.h
和stdlib.h
标头文件。尽管char strArray[30]
足够大以容纳输入字符串,但最好在字符串初始化器中使用空括号,除非您需要比初始字符串大的特定大小。这是不容易出错的,而且更容易,因为没有必要计算字符,也不需要记住为空末端包含空格。您可能希望将puts("");
移至stringReverse()
调用后,因为此功能不会打印新线字符。通常最好将putchar('n');
用于类似的东西。putchar()
旨在仅打印一个字符,因此适合作业的工具也是如此。
看来,使用语句if (strArray != "n") {}
,目标是检查第一个字符是否是新线,但是有一些问题。首先,"n"
是字符串,而不是字符;接下来,strArray
是指向数组strArray[]
的第一个字符,而不是第一个字符本身。输入字符串中没有'n'
字符,因此,即使正确编写了此条件,也始终是正确的,并且该代码将进入无限的递归。最后,传递给stringReverse()
的参数永远不会改变,因此递归无法结束。为了使递归成功,必须收集基本情况。
解决方案是将数组的第一个字符与' '
进行比较。如果第一个字符不是空末端,则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 != ' ') {
stringReverse(strArray + 1);
putchar(*strArray);
}
}
程序输出:
.sdrawkcab gnirts siht tnirP
首先,您需要返回一个值。
那么,您的算法应该做什么?运行直到字符串的决赛,然后仅用一个参数返回变量,然后您只需要将此参数短。
这样:
#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] != ' ') {
int c = 0;
char str[30];
while (c < strlen(strArray)) {
str[c] = strArray[2 + c -1];
c++;
}
str[c] = ' ';
stringReverse(str);
}
printf("%c", strArray[0]);
}
int main(int argc, char *argv[]) {
char strArray[30] = "Print this string backward.";
stringReverse(strArray, 0);
printf("nn");
system("Pause");
return(0);
}