Description
鐘Sir是一個迷信的(superstitious)家伙。他相信每一個字符串(string)裡都有一個幸運字符。我們可以通過以下方法找到這個字符。例如,在字符串abbccc中,c 出現的次數最多,所以這個幸運字符就是 c 啦!(>_<) (鐘Sir的想法好簡單啊…)
Input
第一行是測試數據的組數n,接下來的每組測試數據占一行,每行數據不超過1000個字符且非空。
字符串裡只含小寫字母。
Output
每組數據對應輸出一行,包括出現次數最多的字符和該字符出現的次數,中間是一個空格。如果有多個字符出現的次數相同且最多,那麼輸出ASCII碼最小的那一個字符。
Sample Input
2
abbccc
adfadffasdf
Sample Output
c 3
f 4
#include
int main(void){
int z[30], n, t, g, i, j, a, xia, max;
char ch;
scanf("%d", &t);
for(g=1; g<=t+1; g++){
for(i=1; i<=28; i++)
z[i]=0;//記錄數組初始化
for(i=1; i<=1000; i++){
ch=getchar();
if(ch=='\n')
break;
a=ch-'a'+1;
z[a]++;
}//統計到記錄數組
max=-9;
for(i=1; i<=26; i++){
if(z[i]>max)
{max=z[i]; xia=i;}
}
if(g!=1){
ch='a'+xia-1;
printf("%c ", ch);
printf("%d\n", max);
}
}
return 0;
}
樓主,我幫你看了一個,主要問題是關於C語言在scanf之後,還在輸入字符的問題.
我先把改過的代碼給出 :
#include <stdio.h>
int main(void)
{
int z[30], n, t, g, i, j, a, xia, max;
char ch;
scanf("%d", &t);
getchar();
for(g=1; g<=t; g++)
{
for(i=1; i<=28; i++)
z[i]=0;//記錄數組初始化
for(i=1; i<=1000; i++)
{
ch=getchar();
if(ch=='\n')
break;
a=ch-'a'+1;
z[a]++;
}//統計到記錄數組
max=-9;
for(i=1; i<=26; i++)
{
if(z[i]>max)
{max=z[i]; xia=i;}
}
ch='a'+xia-1;
printf("%c ", ch);
printf("%d\n", max);
}
return 0;
}
這是我自己學C 輸入數字,字符、回車的筆記:
c語言中 scanf後面一定要跟個 getchar吃回車嗎?
如果後面有個scanf或者getchar()讀取字符型的話就會讀到回車了(輸入流緩沖區會保留回車)。fflush和getchar以及相關的一些函數可以吞掉後面的回車
#include
int main()
{
char a;
scanf("%c",&a);
printf("你輸入了%c\n",a);
// fflush(stdin); 也可以用getchar()吞掉回車
scanf("%c",&a);
printf("你輸入了%c\n",a);
return 0;
}
但是為什麼把%c換成%d結果就不一樣了?
%d 輸入的時候,也是輸入了數字+ 回車符
這時候就看你下一條 輸入語句是什麼了 如果也是 %d 那麼沒問題
如果下一條 是 %c那麼就會讀取到留在緩沖區裡的 回車符號
可以百度 搜索“ C 輸數字 字符 回車 ”,看一下第二篇文章
在scanf 之後 可以用 fflush(stdin) 清空緩沖區。
函數名: fflush
功 能: 清除一個流
用 法: int fflush(FILE *stream);
頭文件
getch()、getche()和getchar()函數
(1) getch()和getche()函數
這兩個函數都是從鍵盤上讀入一個字符。其調用格式為:
getch();
getche();
兩者的區別是: getch()函數不將讀入的字符回顯在顯示屏幕上, 而getche()
函數卻將讀入的字符回顯到顯示屏幕上。
例1:
#include
#include //頭文件
main()
{
char c, ch;
c=getch(); /*從鍵盤上讀入一個字符不回顯送給字符變量c*/
putchar(c); /*輸出該字符*/
ch=getche(); /*從鍵盤上帶回顯的讀入一個字符送給字符變量ch*/
putchar(ch);
}
利用回顯和不回顯的特點, 這兩個函數經常用於交互輸入的過程中完成暫停
等功能。
例2:
#include
main()
{
char c, s[20];
printf("Name:");
gets(s);
printf("Press any key to continue..."); //這樣不會在打印出這句話後,立即輸出Press any key to continue 而是等待你輸入一個不回顯的回車後,再輸出最後一句話。
getch(); /*等待輸入任一鍵*/
}
(2) getchar()函數
函數名: getchar
功 能: 從stdin流中讀字符
用 法: int getchar(void);
頭文件: #include
getchar()函數也是從鍵盤上讀入一個字符, 並帶回顯。它與前面兩個函數
的區別在於: getchar()函數等待輸入直到按回車才結束, 回車前的所有輸入字
符都會逐個顯示在屏幕上。但只有第一個字符作為函數的返回值。
#include
getchar()函數的調用格式為:
getchar();
例3:
#include
#include
main()
{
char c;
c=getchar(); /*從鍵盤讀入字符直到回車結束*/
putchar(c); /*顯示輸入的第一個字符*/
getch(); /*等待按任一健*/
}
例4
#include
#include
main()
{
char c;
while ((c=getchar())!='\n') /*每個getchar()依次讀入一個字符*/
printf("%c",c); /*按照原樣輸出*/
getch(); /*等待按任一健*/
}
getch()等待讀取鍵盤輸入的一個字符,不顯示與屏幕上
getche()顯示與屏幕上
我想,如果看了上面的筆記應該會幫助樓主。其實樓主的算法沒有問題。但是我有一些建議給樓主,在取變量名的時候,最見名知義。
比如,用於統計的數組z[],可以用count[]代替,t可以用times(次數)代替。。 這樣,往後自己回看,或者供給他人閱讀,都很方便。希望對樓主有用