来自C语言PTA乙级测试,我这哪里有问题?

img


#include<stdio.h>
void re(char *a[],int i);

int main()
{
    int i=0,count=0;
    char *a[80];
    while((scanf("%s",&a[i])!=EOF)&&getchar()!='\n')
    {
        i++;
    }
    re(a,i);
    
    return 0;
}
void re(char *a[],int i)
{
    for(; i>0; i--)
    {
        printf("%s ",a[i]);
    }
    
    printf("%s",a[0]);
}

还请大家多多指教,最好是有自己设置的函数。

char *a[80],只是定义了80char*而已。这个char*你得给他们设定指向的空间,才有可能接收你输入的字符串啊

代码修改如下:


#include<stdio.h>
void re(char *a[],int i);
int main()
{
    int i=0,count=0;
    char *a[80];
    a[0] = (char*)malloc(100); //100这个根据你的需要来定
    while((scanf("%s",a[i])!=EOF)&&getchar()!='\n')
    {
        i++;
        a[i] = (char*)malloc(100); //100这个根据你的需要来定
    }
    re(a,i);
    return 0;
}
void re(char *a[],int i)
{
    for(; i>0; i--)
    {
        printf("%s ",a[i-1]); //这里是i-1
    }
    printf("%s",a[0]);
}

字符串翻转的最短代码实现


char *strrev(char *str)
{
      char *p1, *p2;
 
      if (! str || ! *str)
            return str;
      for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
      {
            *p1 ^= *p2;
            *p2 ^= *p1;
            *p1 ^= *p2;
      }
      return str;
}