想要实现字符串里的单词逆序输出,如 给定“how are you”,应输出“you are how”
下面的代码想要利用递归算法实现,但发现运行之后没实现,求解!万分感谢!
#include<stdio.h>
#include<string.h>
void fun(char *p,int i,int len);
int main()
{
char a[50]="how are you";
int lenth=strlen(a);
printf("len=%d\n",lenth);
puts(a);
fun(a,0,lenth);
printf("\n");
}
void fun(char *p,int i,int len)
{
for(;i<len;i++)
if(p[i]==' ')
fun(p,i+1,len);
while(p[i-1]!=' ')
i--;
while(p[i]!=' ' && p[i]!='\0')
{ printf("%c",p[i]); i++; }
printf(" ");
}
void fun(char *p,int i,int len)
{
while(p[len-i-1]!=' ')
i++;
while(p[len-i-1]==' ')
{
for(int j=i;j>0;j--){
printf("%c",p[len-j+1]);
}
printf(" ");
fun(p,i,len);
}
}
void fun(char *p,int i,int len)
{
int j = i;//记录单词起始位置
int m = 0;
int n = 0;
for(;i<len;i++)
{
if(p[i]==' ')
{
m = i;//记录单词结束位置
fun(p,i+1,len);
break;
}
}
//为了输出最后一个单词
if (m == 0)
{
m=len;
}
//输出单词
for (n = j;n<m;n++)
{
printf("%c",p[n]);
}
//如果不是第一个单词就输出空格
if (j != 0)
{
printf(" ");
}
}
void fun(char *p,int i,int len)
{ int j;
while(i<len && p[len-i-1]!= ' ')
i++;
j=i;
while(p[len-j]!=' ' && j>0)
{
printf("%c",p[len-j]);
j--;
}
printf(" ");
if(i<len)
fun(p,i+1,len);
}
#include<stdio.h>
#include<string.h>
void fun(char *p,int n=1)
{
int i;
for( i=0; ;i++)
{
if(p[i]==' ')
{
fun(p+i+1,n+1);
break;
}
else if(p[i]==0)
break;
}
i=0;
while(p[i]!=' ' && p[i]!='\0')
{ printf("%c",p[i]); i++; }
if(n!=1) printf(" ");//n=1时是第一个单词,后面不再输出空格。
}
void main()
{
char a[]="how are you";
puts(a);
printf("\n");
fun(a);
printf("\n");
}