回 帖 发 新 帖 刷新版面

主题:请教%c逐个输入和%s输入的问题

/*Description
给定一个只有小写英文字母组成的字符串,串长为n。请你编写程序求出这个字符串中出现次数最多的字母。
Input
输入的第一行为t(0 < t < 10),表示有t组测试用例。
对于每组测试用例,输入有两行。
第一行是一个正整数n( 1 < n < 100)表示字符串的长度。
后面一行是一个长度为n的字符串(只由小写字母组成)。
Output
对于每组测试用例,输出一行,仅输出出现次数最多的字母。
测试用例保证出现次数最多的字母只有一个。
Sample Input
2
5
acmcs
3
zzt
Sample Output
c
z
以下是我的代码,求指教;测试环境vc6.0
*/

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int t,i,j,num,max,cur;
    char str[100],tmp,ch;
    scanf("%d",&t);
    while(t)
    {
        t--;

        scanf("%d",&num);

        /*for(i=0;i<num;i++)//如果使用这一段代码结果会出错
        {
            scanf("%c",&str[i]);
        }
        str[num]='\0';*/
        scanf("%s",str);//使用这句却是正确的

        sort(str,str+num+1);
        printf("%s\n",str);
        max=0;
        ch=str[0];
        for(i=0;i<num;i++)
        {
            tmp=str[i];
            j=i+1;
            cur=1;
            while(tmp==str[j])
            {
                cur++;
                i++;
                j++;
            }
            if(max<cur)
            {
                max=cur;
                ch=tmp;
            }
        }
        printf("%c\n",ch);
    }
    //system("pause");
    return 0;
}

回复列表 (共5个回复)

沙发

scanf("%c",...);得多注意下每次输入后缓冲区留下的'\n'会影响下次的输入,
比如
scanf("%c",&ch1);
scanf("%c",&ch2);
第二次输入时它不会等待你的输入,而是直接从缓冲区读取了一个字符'\n'。

板凳

我猜,把 换行符 也读进去了吧

3 楼

但是那一段并不涉及换行符啊。而且在之后是加了\0的,我最后得到的结果第2组数据输入之后开始试图打印重排后的字符,但是程序直接跳过了。另外,还有一个不明白的地方,为什么vc6.0有时候会有press any key to continue.并停留在那里,但是有时却又不会这样呢?谢谢

4 楼

可否请帮忙详细解释一下,我太菜了,谢谢

5 楼

lz,提供给你一个链接,上面可能说的比较详细、、
[email]null[/email][url]http://www.cnblogs.com/FCWORLD/archive/2010/12/04/1896511.html[/url]
希望lz能理解这个问题、、

至于vc6的press any key to continue,呵呵,要解释这个我还真不行,坐等高手作答!

我来回复

您尚未登录,请登录后再回复。点此登录或注册