#include <stdlib.h>
#include <string.h>
int main()
{
char a[1001],b[1001];
int i,j;
while(gets(a))
{
int sta_a[123]={0},sta_b[123]={0}; //每次比較後都要清空陣列
for(i=0;i<strlen(a);i++)
sta_a[(int)a[i]]++;
gets(b); //有的好像不支援gats寫法 C11不支援?
for(i=0;i<strlen(b);i++) //a陣列與b陣列各自計算到各自的數字陣列
sta_b[(int)b[i]]++;
for(i='a' ; i<'z' ; i++) //這裡原本是數字,但因為我有時會忘記ASCII表,想說用字母來打好像比較明瞭一點
{
j=0; //再來比較兩個陣列之間的數字
while(j<sta_a[i] && j<sta_b[i]) /
/判斷的方式是看兩個陣列共通的那個字母,並取決於較少的那個陣列,這樣就算有一個字串同時有兩的字母也不會算錯
{
printf("%c",i);
j++;
}
} printf("\n");
}
return 0;
}
題目網址:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=&problem=1193&mosmsg=Submission+received+with+ID+21136828
我覺得重要的概念:
*gets(a)用來抓字串,感覺很方便,但好像C11不支援
*scanf碰到空格之類的都會停止,再輸入字串,get比較好用
*我本來的寫法是用一個數字陣列去統計兩個字元陣列,但我發現會有一個字串同於兩個字母的問題,看了書上的解法,還是分開計算在比較,會容易一點
參考:
https://openhome.cc/Gossip/CGossip/PutcharGetcharPutsGets.html
http://leoenglish.blog.163.com/blog/static/1750319852011296336486/
http://style77125tech.pixnet.net/blog/post/174460605-%5B-c-%5D-gets%28%29-scanf%28%29-%E7%A9%BA%E7%99%BD%E6%8E%A7%E5%88%B6
沒有留言:
張貼留言