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码排序的主要内容,如果未能解决你的问题,请参考以下文章

按照ASCII码升序排序问题,我哪里不对呀?

C语言问题:输入一行字符串,然后按照ASCII码大小进行升序排序。

ZZNUOJ_C语言1086:ASCII码排序(多实例测试)(完整代码)

c语言字符ASCLL码顺序

ACM-ASCII码排序

c语言怎么求字符的ascii码