評價: 2 回應: 6 閱覽: 403
置頂

字元排序

大家好呀

小花ㄦ,今天看到了一個好玩的問題

手動輸入一字串(可以有數字、英文字母) 

然後將輸入的字串做排序 

排序的規則:數字→小寫字母→大寫字母 

數字:由小排到大 

字母:按照字母順序排 

使用ASCII碼當排序依據 

書上要求運用二維陣列、scanf和get來寫

 

請問板上各位大大這題要怎麼解呢??

熱門回應

大神來也!

法1 
給 0~9, a~z, A~Z 新的編號,存在對應到原本ASCII的陣列位置裡,如: 
 把 0~9 = 0~9, a~z=10~35, A~Z=36~61 
 設定到 
 A['0'] = 0, A['1'] = 1...(用 for 去設定) 
 A['a'] = 10, A['b'] = 11... 
 A['A'] = 36, ... 
Ex: 
 for (i=0; i< 26; ++i) 
  A['a'+i] = 10 + i, 
  A['A'+i] = 36 + i; 

2012-12-04 08:56:44 補充: 
在排序的比大小時,本來的 
 if (buf[i] < buf[j]) 
變成 
 if (A[buf[i]] < A[buf[j]]) 
就可以了。 

= = = = 

法2 (可再化簡) 
0. 先算有多少 0~9, a~z, A~Z 
1. 再把 0~9 集中到A[]的最前面,a~z集中到A[]的數字後,A~Z接在a~z之後。 
2. 分三段排 0~9, a~z, A~Z 

這方法易懂,所以我就不寫 示範的 code 了。 

這方法易懂,但效果較差,至少,擴充性較不好。 

 

跪下吧!庶民們~~
 

int main(){ 
int a[256]; 
for(int i=sizeof(a)/sizeof(a[0])-1; i>=0; a[i]=0); 
for(char c=0;EOF!=(c=getchar()); ++a[c]); 
for(char c='0';c<='9';++c)for(int i=a[c];0<i;i)putchar(c); 
for(char c='a';c<='z';++c)for(int i=a[c];0<i;i)putchar(c); 
for(char c='A';c<='Z';++c)for(int i=a[c];0<i;i)putchar(c); 
return 0; 
} 

 

不好意思ㄦ

我來晚了

使用的語法是C語言歐~~

大家好 我不是大神

我只是路過的路人甲

五樓才是大神

你要寫的是什麼語言哩?

發文記得要寫你要寫的語言歐

不然下面大神哪知道你要解答的是什麼

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言