鱼C论坛

 找回密码
 立即注册
查看: 778|回复: 8

[已解决]请问一个字符串转置程序的问题

[复制链接]
发表于 2020-4-9 14:18:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  3. void main ()
  4. {
  5.         int i,j,n;
  6.         char a1[100];
  7.         printf ("请输入一串字符串:");
  8.         scanf ("%s", &a1);
  9.         n = strlen(a1);
  10.         j = n-1;
  11.         char a2[n];
  12.        
  13.         for (j; j >= 0; j--)
  14.         {
  15.                 i = n - j - 1;
  16.                 if (a1[j] = '\0')
  17.                 {
  18.                         getchar();
  19.                 }
  20.                 else
  21.                 {
  22.                         a2[i] = a1[j];
  23.                 }
  24.         }
  25.        
  26.         printf ("转置后的字符串为:%s", a2);
  27. }
复制代码
最佳答案
2020-4-9 14:39:35
有两处错误
1、scanf中a1不应该加&,因为a1本来就是数组的地址
2、for循环中的if条件写错了你写成赋值了,应该是两个等号

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

有一点我没明白你的用意,
for中的if目的是什么?
里面的getchar又是干什么的?getchar()没有用的话,改为continue如何?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-9 15:00:16 | 显示全部楼层
感谢各位,我用gets函数就能用了
  1. #include<stdio.h>
  2. #include<string.h>

  3. void main ()
  4. {
  5.         int i,j,n;
  6.         char a1[100];
  7.         printf ("请输入一串字符串:");
  8.         gets(a1);
  9.         n = strlen(a1);
  10.         j = n-1;
  11.         char a2[n];
  12.        
  13.         for (j; j >= 0; j--)
  14.         {
  15.                 i = n - j - 1;
  16.                 a2[i] = a1[j];
  17.         }
  18.        
  19.         printf ("转置后的字符串为:%s", a2);
  20. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 14:34:00 | 显示全部楼层
判断用 == ,而不是一个 =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 14:36:02 | 显示全部楼层
可以直接用指针访问,比较简单
另外,strlen函数计算长度并不包括'\0'吧,可以试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 14:39:35 | 显示全部楼层    本楼为最佳答案   
有两处错误
1、scanf中a1不应该加&,因为a1本来就是数组的地址
2、for循环中的if条件写错了你写成赋值了,应该是两个等号

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

有一点我没明白你的用意,
for中的if目的是什么?
里面的getchar又是干什么的?getchar()没有用的话,改为continue如何?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  10.         n = strlen(a1);
  11.         j = n-1;
  12.         char a2[n];
  13.        
  14.         for (j; j >= 0; j--)
  15.         {
  16.                 i = n - j - 1;
  17.                 if (a1[j] == '\0')
  18.                 {
  19.                         getchar();  //遇到空格,将空格截取下来,直接进行下一个元素的复制,我怕碰到空格就程序结束,或者卡住
  20.                 }
  21.                 else
  22.                 {
  23.                         a2[i] = a1[j];
  24.                 }
  25.         }
  26.        
  27.         printf ("转置后的字符串为:%s", a2);
  28. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 16:18:13 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<string.h>

  3. void main ()
  4. {
  5.         int i,j,n;
  6.         
  7.         char a1[100];
  8.         
  9.         printf ("请输入一串字符串:");
  10.         
  11.         scanf("%s",a1);
  12.         
  13.         n = strlen(a1);
  14.         
  15.         printf("a1数组的有效长度为:%d\n",n);
  16.         
  17.         char a2[n + 1];//strlen()长度不包括尾部\0;
  18.         
  19.         for (j = n - 1; j >= 0; j--)
  20.         {
  21.                 i = n - j - 1;
  22.                 a2[i] = a1[j];
  23.         }
  24.         a2[i + 1] = '\0';//数组最后加上结束标志\0;

  25.         printf ("转置后的字符串为:%s", a2);
  26. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-9 16:26:34 | 显示全部楼层
#include<stdio.h>
#include<string.h>

void main ()
{
        int i,j = 0,n;
        
        char a1[100];
        
        printf ("请输入一串字符串:");
        
        while((a1[j++] = getchar()) != '\n')
        ;
       a1[j -1] = '\0';
        
        n = strlen(a1);
        
        printf("a1数组的有效长度为:%d\n",n);
        
        char a2[n + 1];//strlen()长度不包括尾部\0;
        
        for (j = n - 1; j >= 0; j--)
        {
                i = n - j - 1;
                a2[i] = a1[j];
        }
        a2[i + 1] = '\0';//数组最后加上结束标志\0;
        printf ("转置后的字符串为:%s", a2);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

scanf函数应该碰到空格或者回车退出函数体结束;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-26 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表