鱼C论坛

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

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

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

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

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

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

void main ()
{
        int i,j,n;
        char a1[100];
        printf ("请输入一串字符串:");
        scanf ("%s", &a1);
        n = strlen(a1);
        j = n-1;
        char a2[n];
        
        for (j; j >= 0; j--)
        {
                i = n - j - 1;
                if (a1[j] = '\0')
                {
                        getchar();
                }
                else
                {
                        a2[i] = a1[j];
                }
        }
        
        printf ("转置后的字符串为:%s", a2);
}
最佳答案
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函数就能用了
#include<stdio.h> 
#include<string.h>

void main ()
{
        int i,j,n;
        char a1[100];
        printf ("请输入一串字符串:");
        gets(a1);
        n = strlen(a1);
        j = n-1;
        char a2[n];
        
        for (j; j >= 0; j--)
        {
                i = n - j - 1;
                a2[i] = a1[j];
        }
        
        printf ("转置后的字符串为:%s", a2);
}
想知道小甲鱼最近在做啥?请访问 -> 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就直接不能获取空格后的字符,请问有办法么,将带空格的字符串存入数组,然后用我的想法进行字符串转置
#include<stdio.h> 
#include<string.h>
void main ()
{
        int i,j,n;
        char a1[100];
        printf ("请输入一串字符串:");
        scanf ("%s", a1);
        printf ("%s", a1);

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

使用道具 举报

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

void main ()
{
        int i,j,n;
        
        char a1[100];
        
        printf ("请输入一串字符串:");
        
        scanf("%s",a1); 
        
        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: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, 2025-1-15 12:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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