只有70分,显示wrong answer too short,求助大佬

B2110 找第一个只出现一次的字符

keywords @ 2021-08-18 07:47:57

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[10001];
int main()
{
    int s,f=0,c;
    gets(a);c=strlen(a);

    for(int i=0;i<c;i++)
    {
        s=a[i];
        for(int j=i+1;j<c;j++)
        {
            if(s==a[j])
            {
                a[j]='0';a[i]='0';
            }
        }
    }
    for(int i=0;i<c;i++)
    {
        if(a[i]!='0')
        {
            cout<<a[i];
            f=1;
            break;
        }
    }
    if(f==0)
        cout<<"no";

    return 0;
}

by CarryQwQ @ 2021-08-18 08:01:18

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string  a;
int main()
{
    int s,f=0,c;
    cin >> a;c=a.length();

    for(int i=0;i<c;i++)
    {
        s=a[i];
        for(int j=i+1;j<c;j++)
        {
            if(s==a[j])
            {
                a[j]='0';a[i]='0';
            }
        }
    }
    for(int i=0;i<c;i++)
    {
        if(a[i]!='0')
        {
            cout<<a[i];
            f=1;
            break;
        }
    }
    if(f==0)
        cout<<"no";

    return 0;
}

by 信守天下 @ 2021-08-18 08:01:34

可能是 gets 的锅?


by CarryQwQ @ 2021-08-18 08:02:01

@keywords 把字符数组改成字符串就好了。

其实我也不明白为什么


by 信守天下 @ 2021-08-18 08:03:14

@keywords 应该是无解输出 no,但是因为 gets 读了一个换行符,所以输出了一个换行。


by 信守天下 @ 2021-08-18 08:05:22

@CarryQwQ 不用改字符串,用 scanf 读入就行了


by CarryQwQ @ 2021-08-18 08:05:33

@keywords 我又突然明白了,的确是 gets 的锅,因为 gets 可以读入空格,把 gets 换成 scanf 试试。


by CarryQwQ @ 2021-08-18 08:07:57

@信守天下 是的。


by 信守天下 @ 2021-08-18 08:12:12

@keywords 建议以后不要使用 gets 函数,会多很多错误,字符数组用 scanfstringcin


by ImposterAnYu @ 2021-08-18 08:30:54

@keywords

不要用gets,因为gets会读入换行符和空格,而且gets 容易炸。


by keywords @ 2021-08-23 21:17:22

@ImopsterAnYu 十分感谢!


| 下一页