为什么该程序代码没有提供所需的输出?我尝试使用递归和LIFO概念在此代码中反转字符数组。
#include<stdio.h>
void reverse(char a[]);
int main()
{
char a[] = "NAME";
printf("The original character string is: %s\n",a);
printf("The reversed string is:\n");
reverse(a);
system("pause");
}
void reverse(char a[])
{
static int i = 0;
int j = i;
while (a[i] == '\0')
{
i++;
reverse(a);
}
printf("%c", a[j]);
}
答案 0 :(得分:1)
如果要递归,请不要使用静态变量。递归可以非常简单。以下是您想要的。请仔细研究:
{
allMarkdownRemark (
filter: {
frontmatter: { type: { eq: "folio" } }
}
) {
edges {
node {
frontmatter {
title
featured_image
type
}
}
}
}
}
答案 1 :(得分:1)
首先,条件应该是:
a[i]!='\0'
而非
a[i] == '\0'
第二,应该简单地 if 而不是 while 循环,因为递归将照顾到char数组。
为什么在这个简单的问题上为什么还需要 system()函数?
第三,您不需要 j ,只需在打印时递减i,即可使正确的代码为:
#include<stdio.h>
void reverse(char a[]);
int main()
{
char a[] = "NAME";
reverse(a);
}
void reverse(char a[])
{
static int i = 0;
if(a[i]!='\0')
{
i++;
reverse(a);
}
printf("%c",a[i--]);
}
答案 2 :(得分:0)
首先,在您的代码中不需要j变量。
第二,您必须使用条件语句 if 代替 while循环。该循环只会一次又一次地迭代递归函数。循环是非常复杂的递归函数。为了您的理解,请用笔和纸仔细地绘制递归函数的功能!!!
第三,条件将是
a[i]!='\0'
不是
a[i]=='\0'
第四,对于打印,使用 i 的减量运算符。 反向功能应如下所示:
void reverse(char a[])
{
static int i = 0;
if(a[i]!='\0')
{
i++;
reverse(a);
}
printf("%c",a[i--]);
}
要反转字符串,您还可以使用以下代码
#include<stdio.h>
void back_print(void)
{
char ch;
if((ch=getchar())!='\n')
back_print();
putchar(ch);
}
int main()
{
printf("Enter a text line :");
back_print();
}
以上代码称为 backprint 代码。
通过使用 LIFO 方法( Stack ),您可以使用以下代码:
#include<stdio.h>
#define MAX_SIZE 100
int TOP=-1;
int stri[MAX_SIZE];
void push(char item)
{
stri[++TOP]=item;
}
void pop()
{
TOP--;
}
char top()
{
return stri[TOP];
}
int main()
{
char ch;
printf("Enter the STRING: ");
for(int i=0; i<MAX_SIZE; i++)
{
scanf("%c",&ch);
if(ch=='\n')
break;
push(ch);
}
printf("After reverse the STRING is : ");
for(int i=0; TOP>-1; i++)
{
printf("%c",top());
pop();
}
printf("\n");
}