ASCII码排序

在这里插入图片描述

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{	
    char a,b,c,t;
    while(scanf("%c%c%c%*c",&a,&b,&c) !=EOF)
    {
        if(a>b)
        {
            t=a;
            a=b;
            b=t;
        }
        if(a>c)
        {
            t=a;
            a=c;
            c=t;
        }
        if(b>c)
        {
            t=b;
            b=c;
            c=t;
        }            
        printf("%c %c %c\n",a,b,c);
    }
    return 0;
}	

调试报告:
1.还是太生疏了,漏洞百出
2.竟然忘记了加输入输出哈哈哈。。。
3.return 0 错加到最后一行
4.多处忘记加上分号
5.if 后面忘记加括号
6.将字符 %c 写成了字符串%
7.不知道 return 0 后面要加上分号
8.忘了定义变量类型
讲解:
1.依据题目要求,输入不能有空格,所以输入时加上 %*c,可以避免输出上的漏洞
2.输出时要加换行
3.看一个错解:

//ASCII码排序
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main() 
{	
	char a,b,c,t,m,n;
	while(scanf("%c%c%c%*c",&a,&b,&c) !=EOF){
		if (a>b){
			t=a;
			a=b;
			b=t;
		}
		if (b>c){
			m=c;
			c=b;
			b=m;
		}
		if (a>c){
			n=c;
			c=a;
			a=n;
		}
		printf("%c %c %c\n",a,b,c);
	}
	return 0;
}

有人可能会问,这不一样吗?我一开始也是这样认为的,我感觉调换的顺序应该没影响吧,但经过深思熟虑,恍悟起始不然!让我们分析一下:
以a b c 为例:
有六种排法,我们看 c b a 排法,经过错解排完变成 b a c,错误,为什么呢?先看第一种正确的方法:前两步扎扎实实地把 0 位置的换成了ascii 码最小的,最后一步调换后两位的顺序,由此我们可以推想如果是排四位五位也应该是从左往右一个一个地确定,而第二种错误的方法与定义的变量没有关系,只是说前两步只是把最大的确定了,最后一步还是比较 0 位和 2 位,这样一想是毫无意义的,所以第三步应该确定前两位的大小关系,改为:

//ASCII码排序
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main() 
{	
	char a,b,c,t,m,n;
	while(scanf("%c%c%c%*c",&a,&b,&c) !=EOF){
		if (a>b){
			t=a;
			a=b;
			b=t;
		}
		if (b>c){
			m=c;
			c=b;
			b=m;
		}
		if (a>b){
			n=b;
			b=a;
			a=n;
		}
		printf("%c %c %c\n",a,b,c);
	}
	return 0;
}

哈哈哈,挺开心的,我搞懂了,知其然还要知其所以然,不要浅尝辄止哦~
努力!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值