Doughnut 发表于 2020-4-9 14:18:29

请问一个字符串转置程序的问题

请问我写的这个程序有什么问题?运行后显示转置后什么都没有,我的想法是设置两个数组,第一个存储用户输入的字符串a1,另一个显示转置后的字符串a2,具体就是从a1最后一个元素开始直接赋给a2的第一个元素,然后依次复制完所有的元素,最早的版本是碰到空格后,后面的字符就都没有了。有没有什么简单的方法实现这个转置的功能么?#include<stdio.h>
#include<string.h>

void main ()
{
        int i,j,n;
        char a1;
        printf ("请输入一串字符串:");
        scanf ("%s", &a1);
        n = strlen(a1);
        j = n-1;
        char a2;
       
        for (j; j >= 0; j--)
        {
                i = n - j - 1;
                if (a1 = '\0')
                {
                        getchar();
                }
                else
                {
                        a2 = a1;
                }
        }
       
        printf ("转置后的字符串为:%s", a2);
}

Doughnut 发表于 2020-4-9 15:00:16

感谢各位,我用gets函数就能用了#include<stdio.h>
#include<string.h>

void main ()
{
        int i,j,n;
        char a1;
        printf ("请输入一串字符串:");
        gets(a1);
        n = strlen(a1);
        j = n-1;
        char a2;
       
        for (j; j >= 0; j--)
        {
                i = n - j - 1;
                a2 = a1;
        }
       
        printf ("转置后的字符串为:%s", a2);
}

BngThea 发表于 2020-4-9 14:34:00

判断用 == ,而不是一个 =

love_qj 发表于 2020-4-9 14:36:02

可以直接用指针访问,比较简单
另外,strlen函数计算长度并不包括'\0'吧,可以试试

sunrise085 发表于 2020-4-9 14:39:35

有两处错误
1、scanf中a1不应该加&,因为a1本来就是数组的地址
2、for循环中的if条件写错了你写成赋值了,应该是两个等号

还有一处可能与编译器有关,不同的编译器下可能会不一样
a2的长度定义,建议改成n+1,然后在for循环结束后,printf之前加一句a2='\0';

有一点我没明白你的用意,
for中的if目的是什么?
里面的getchar又是干什么的?getchar()没有用的话,改为continue如何?

Doughnut 发表于 2020-4-9 14:50:49

sunrise085 发表于 2020-4-9 14:39
有两处错误
1、scanf中a1不应该加&,因为a1本来就是数组的地址
2、for循环中的if条件写错了你写成赋值了 ...

你好,我改了一下,但是我发现,scanf就直接不能获取空格后的字符,请问有办法么,将带空格的字符串存入数组,然后用我的想法进行字符串转置#include<stdio.h>
#include<string.h>
void main ()
{
        int i,j,n;
        char a1;
        printf ("请输入一串字符串:");
        scanf ("%s", a1);
        printf ("%s", a1);

        n = strlen(a1);
        j = n-1;
        char a2;
       
        for (j; j >= 0; j--)
        {
                i = n - j - 1;
                if (a1 == '\0')
                {
                        getchar();//遇到空格,将空格截取下来,直接进行下一个元素的复制,我怕碰到空格就程序结束,或者卡住
                }
                else
                {
                        a2 = a1;
                }
        }
       
        printf ("转置后的字符串为:%s", a2);
}

Draem 发表于 2020-4-9 16:18:13

#include<stdio.h>
#include<string.h>

void main ()
{
      int i,j,n;
      
      char a1;
      
      printf ("请输入一串字符串:");
      
      scanf("%s",a1);
      
      n = strlen(a1);
      
      printf("a1数组的有效长度为:%d\n",n);
      
      char a2;//strlen()长度不包括尾部\0;
      
      for (j = n - 1; j >= 0; j--)
      {
                i = n - j - 1;
                a2 = a1;
      }
      a2 = '\0';//数组最后加上结束标志\0;

      printf ("转置后的字符串为:%s", a2);
}

Draem 发表于 2020-4-9 16:26:34

#include<stdio.h>
#include<string.h>

void main ()
{
      int i,j = 0,n;
      
      char a1;
      
      printf ("请输入一串字符串:");
      
      while((a1 = getchar()) != '\n')
      ;
       a1 = '\0';
      
      n = strlen(a1);
      
      printf("a1数组的有效长度为:%d\n",n);
      
      char a2;//strlen()长度不包括尾部\0;
      
      for (j = n - 1; j >= 0; j--)
      {
                i = n - j - 1;
                a2 = a1;
      }
      a2 = '\0';//数组最后加上结束标志\0;
      printf ("转置后的字符串为:%s", a2);
}

Draem 发表于 2020-4-9 16:28:17

Doughnut 发表于 2020-4-9 14:50
你好,我改了一下,但是我发现,scanf就直接不能获取空格后的字符,请问有办法么,将带空格的字符串存入 ...

scanf函数应该碰到空格或者回车退出函数体结束;
页: [1]
查看完整版本: 请问一个字符串转置程序的问题