c语言ASCII码排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言ASCII码排序相关的知识,希望对你有一定的参考价值。
ASCII码排序
Problem Description
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
Sample Input
qweasdzxc
Sample Output
e q w
a d s
c x z
#include<stdio.h>
main()
char a,b,c,t;
int x,y,z;
while(scanf("%c%c%c",&a,&b,&c)!=EOF);
x=int(a);
y=int(b);
z=int(c);
while(x<y&&y<z&&x<z);
if(x>y)
t=a;a=b;b=t;
if(x>z)
t=a;a=c;c=t;
if(y>z)
t=b;b=c;c=t;
printf("%c %c %c\n",a,b,c);
用C++
总是wrong answer
我的问题是在“输入数据有多组”,望高手指点迷津! 第三位回答者的写法还是在杭电的ACM上没通过,还是WA。杭电网站是acm.hdu.edu.cn.还有这里我打错了Sample Input
qweasdzxc
应为qwe
asd
zxc
感谢NEV_CC我解决了输入数据有多组,但出现答案每次输会有变化!!
#include<stdio.h>
main()
char a,b,c,t;
int x,y,z;
while(scanf("%c%c%c",&a,&b,&c)!=EOF)
x=int(a);
y=int(b);
z=int(c);
while(x<y&&y<z&&x<z);
if(x>y)
t=a;a=b;b=t;printf("%c %c %c\n",a,b,c);
if(x>z)
t=a;a=c;c=t;printf("%c %c %c\n",a,b,c);
if(y>z)
t=b;b=c;c=t;printf("%c %c %c\n",a,b,c);
x=0;y=0;z=0;
printf("%c %c %c\n",a,b,c);
回答三楼的NEU_CC。我要在程序不结束的情况下一组一组输
思路:就是求三个字符按照ASCII码顺序进行排序输出,三个字符排序可以先求出三个数中的最大值和最小值,再把三个字符相加减去最大和最小的就是中间字符。
参考代码:
#include<stdio.h>main()
char a,b,c,max,min;
while(scanf("%c%c%c",&a,&b,&c)!=EOF)
max=(a>b?a:b)>c?(a>b?a:b):c;
min=(a<b?a:b)<c?(a<b?a:b):c;
printf("%c %c %c\\n",min,a+b+c-min-max,max);
/*
输出:
qweasdzxc
e q w
a d s
c x z
*/ 参考技术A #include<stdio.h>
void main()
char a,b,c,t;
int x,y,z;
while(scanf("%c%c%c",&a,&b,&c)==EOF); //这里修改了判断,否则不能执行下面的程序
x=int(a);
y=int(b);
z=int(c);
while(x<y&&y<z&&x<z);
if(x>y)
t=a;a=b;b=t;
if(x>z)
t=a;a=c;c=t;
if(y>z)
t=b;b=c;c=t;
printf("%c %c %c\n",a,b,c);
另外,你的程序只能判断前三位,即qwe,因为scanf的时候,只有a,b,c接收字符,所以不能判断后面的asdzxc.
还有,这个程序可以改进,可以去掉第一层while(scanf("%c%c%c",&a,&b,&c)==EOF);直接写成scanf("%c%c%c",&a,&b,&c);就可以了。
你想一次输入
qwe
asd
zxc
后,然后显示
ewq
dsa
cxz
还是一步一步的,输入qwe后,显示ewq,再输入asd后,显示dsa,最后输入zxc后,显示cxz???
#include<stdio.h>
void main()
char a,b,c,t;
int x,y,z;
//while(scanf("%c%c%c",&a,&b,&c) != EOF);
for (;;)
scanf("%c%c%c",&a,&b,&c);
x=int(a);
y=int(b);
z=int(c);
while(x<y&&y<z&&x<z);
if(x>y)
t=a;a=b;b=t;
if(x>z)
t=a;a=c;c=t;
if(y>z)
t=b;b=c;c=t;
printf("%c %c %c\n",a,b,c);
你看看这样的程序呢?试验一下,是你想要的结果,但是我没有使用while(XXX!=EOF),这个还没有想明白。本回答被提问者采纳 参考技术B 这个问题是一类典型的问题:读取之前的回车符错误。
输入函数存在一个缓冲区,输入函数每次都会从输入缓冲区读数。同时,scanf()与getchar
()函数有一个相同的特点,就是输入完毕必须敲回车键才算完成输入。而getch(),getche()是
不需要回车键作为结束的。然而,只要输入缓冲区没有清空,所有字符包括回车都会记录在
输入缓冲区。如果没有将缓冲区清空,若下次调用scanf()与getchar()函数读取字符,则问
题就出现了,因为回车本身就是字符。
比如在这个程序中楼主会发现第一次输“qwe<回车>”,答案是“e
q
w”,但是第二次输
“ads<回车>”后,却出现了“<回车>
a
d”,却没有“s”,第三次输入“cxz<回车>”,则
更奇怪得出现了“<回车>
c
s”和“<回车>
x
z”。
因为根据你的输入依次是“qwe<回车>ads<回车>cxz<回车>”,输入缓冲区没有清空,每次读
三个,将<回车>也读入,对其进行排序难道不是这个结果吗?
要想改对,只要加一个fflush(stdin);清空输入缓冲区就解决了!
看程序:
#include<stdio.h>
int
main()
char
a,b,c,t;
int
x,y,z;
while(scanf("%c%c%c",&a,&b,&c)!=EOF)
fflush(stdin);
x=(int)a;
//楼主这有些语法错误,我已经改过来了
y=(int)b;
z=(int)c;
if(x>y)
t=a;
a=b;
b=t;
if(x>z)
t=a;
a=c;
c=t;
if(y>z)
t=b;
b=c;
c=t;
printf("%c
%c
%c\n",a,b,c);
return
0;
参考技术C /******************用这个试一下,你还得加看见回车就输入完毕*********/
#include<iostream.h>
#include<conio.h>
#include<string.h>
void swap(char x,char y,char z)
char t;
while(x<y&&y<z&&x<z);
if(x>y)
t=x;x=y;y=t;
if(x>z)
t=x;x=z;z=t;
if(y>z)
t=y;y=z;z=t;
cout<<x<<" "<<y<<" "<<z<<" "<<endl;
void main()
char a[30];
for(int i=0;i<30;i++)
cin>>a[i];
int k=0;
for(int j=k;j<strlen(a)/3;j++)
swap(a[j],a[j+1],a[j+2]);
k+=3;
参考技术D while(x<y&&y<z&&x<z);
if(x>y)
t=a;a=b;b=t;
if(x>z)
t=a;a=c;c=t;
if(y>z)
t=b;b=c;c=t;
这里改成这样试试:
while(1)
if(x>y)t=a;a=b;b=t;
if(x>z)t=a;a=c;c=t;
if(y>z)t=b;b=c;c=t;
break;
c语言字符ASCLL码顺序
如‘D’的ASCLL为68,那么‘D’+9的字符为?能讲讲怎么弄的吗?我不会…谢谢
ASCII码大致可以分作三部分组成。
第一部分是:ASCII非打印控制字符;
第二部分是:ASCII打印字符;
第三部分是:扩展ASCII打印字符。
第一部分:ASCII非打印控制字符表
ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页/新页功能。此命令指示打印机跳到下一页的开头。(参详ASCII码表中0-31)
第二部分:ASCII打印字符
数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字127代表 DELETE 命令。(参详ASCII码表中32-127)
ASCII码表 0-127
Bin Dec Hex 缩写/字符 解释
00000000 0 00 NUL(null) 空字符
00000001 1 01 SOH(start of headling) 标题开始
00000010 2 02 STX (start of text) 正文开始
00000011 3 03 ETX (end of text) 正文结束
00000100 4 04 EOT (end of transmission) 传输结束
00000101 5 05 ENQ (enquiry) 请求
00000110 6 06 ACK (acknowledge) 收到通知
00000111 7 07 BEL (bell) 响铃
00001000 8 08 BS (backspace) 退格
00001001 9 09 HT (horizontal tab) 水平制表符
00001010 10 0A LF (NL line feed, new line) 换行键
00001011 11 0B VT (vertical tab) 垂直制表符
00001100 12 0C FF (NP form feed, new page) 换页键
00001101 13 0D CR (carriage return) 回车键
00001110 14 0E SO (shift out) 不用切换
00001111 15 0F SI (shift in) 启用切换
00010000 16 10 DLE (data link escape) 数据链路转义
00010001 17 11 DC1 (device control 1) 设备控制1
00010010 18 12 DC2 (device control 2) 设备控制2
00010011 19 13 DC3 (device control 3) 设备控制3
00010100 20 14 DC4 (device control 4) 设备控制4
00010101 21 15 NAK (negative acknowledge) 拒绝接收
00010110 22 16 SYN (synchronous idle) 同步空闲
00010111 23 17 ETB (end of trans. block) 传输块结束
00011000 24 18 CAN (cancel) 取消
00011001 25 19 EM (end of medium) 介质中断
00011010 26 1A SUB (substitute) 替补
00011011 27 1B ESC (escape) 溢出
00011100 28 1C FS (file separator) 文件分割符
00011101 29 1D GS (group separator) 分组符
00011110 30 1E RS (record separator) 记录分离符
00011111 31 1F US (unit separator) 单元分隔符
00100000 32 20 (space) 空格
00100001 33 21 !
00100010 34 22 "
00100011 35 23 #
00100100 36 24 $
00100101 37 25 %
00100110 38 26 &
00100111 39 27 '
00101000 40 28 (
00101001 41 29 )
00101010 42 2A *
00101011 43 2B +
00101100 44 2C ,
00101101 45 2D -
00101110 46 2E .
00101111 47 2F /
00110000 48 30 0
00110001 49 31 1
00110010 50 32 2
00110011 51 33 3
00110100 52 34 4
00110101 53 35 5
00110110 54 36 6
00110111 55 37 7
00111000 56 38 8
00111001 57 39 9
00111010 58 3A :
00111011 59 3B ;
00111100 60 3C <
00111101 61 3D =
00111110 62 3E >
00111111 63 3F ?
01000000 64 40 @
01000001 65 41 A
01000010 66 42 B
01000011 67 43 C
01000100 68 44 D
01000101 69 45 E
01000110 70 46 F
01000111 71 47 G
01001000 72 48 H
01001001 73 49 I
01001010 74 4A J
01001011 75 4B K
01001100 76 4C L
01001101 77 4D M
01001110 78 4E N
01001111 79 4F O
01010000 80 50 P
01010001 81 51 Q
01010010 82 52 R
01010011 83 53 S
01010100 84 54 T
01010101 85 55 U
01010110 86 56 V
01010111 87 57 W
01011000 88 58 X
01011001 89 59 Y
01011010 90 5A Z
01011011 91 5B [
01011100 92 5C \\
01011101 93 5D ]
01011110 94 5E ^
01011111 95 5F _
0110000 96 60 `
01100001 97 61 a
01100010 98 62 b
01100011 99 63 c
01100100 100 64 d
01100101 101 65 e
01100110 102 66 f
01100111 103 67 g
01101000 104 68 h
01101001 105 69 i
01101010 106 6A j
01101011 107 6B k
01101100 108 6C l
01101101 109 6D m
01101110 110 6E n
01101111 111 6F o
01110000 112 70 p
01110001 113 71 q
01110010 114 72 r
01110011 115 73 s
01110100 116 74 t
01110101 117 75 u
01110110 118 76 v
01110111 119 77 w
01111000 120 78 x
01111001 121 79 y
01111010 122 7A z
01111011 123 7B
01111100 124 7C |
01111101 125 7D
01111110 126 7E ~
01111111 127 7F DEL (delete) 删除
3. 第三部分:扩展ASCII打印字符
扩展的ASCII字符满足了对更多字符的需求。扩展的ASCII包含ASCII中已有的128个字 符(数字0–32显示在下图中),又增加了128个字符,总共是256个。即使有了这些更 多的字符,许多语言还是包含无法压缩到256个字符中的符号。因此,出现了一些 ASCII的变体来囊括地区性字符和符号。例如,许多软件程序把ASCII表(又称作 ISO8859-1)用于北美、西欧、澳大利亚和非洲的语言。
参考技术A D+9后 是 M小写字母的十进制数字表示范围:(起始是小写a)97~122
大写的范围是:(起始是大写A)61~86
你如果不懂这ascll 码排列方法,你去搜索一下,自己看看。我说不明白
参考资料:如果您的回答是从其他地方引用,请表明出处
本回答被提问者采纳以上是关于c语言ASCII码排序的主要内容,如果未能解决你的问题,请参考以下文章
C语言问题:输入一行字符串,然后按照ASCII码大小进行升序排序。