vs上没问题,提交过不了用例

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

gzgdh5545 @ 2023-03-07 21:02:46

```cpp
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main(){
    int a[128] = { 0 };//记录字符对应的ascii码出现次数
    string s;
    getline(cin, s);
    for (int i = 0; i <s.length(); i++) {
        int x=s[i];
        a[x]++;
    }
    for (int i = 0; i <128; i++) {
        if (a[i] == 1) {//要找的字符
            char ch=i;//转换为字符类型
            cout << ch;
            return 0;
        }
    }
    cout << "no";
        return 0;
}

by SaintRelief @ 2023-03-07 21:08:44

@gzgdh5545 你试试getline(cin, s);改成getline(cin, s,'\r');


by gzgdh5545 @ 2023-03-07 21:36:46

@SaintRelief 有分了感谢,不过没有全部ac,这个'\r'的作用是啥


by SaintRelief @ 2023-03-07 21:41:27

@gzgdh5545 可以简单理解为回车,更深的含义吗……@Franz_Liszt 李斯特老师帮个忙


by Eleveslaine @ 2023-03-07 21:47:28

@gzgdh5545 自行百度一下 \n 与 \r 的区别,在代码里最好过滤掉。

这题没有空格,可以直接 cin >> s。另外要注意,不一定是按照字符 ASCII 从小到大的顺序给出的,例如 ea 应输出 e 而不是 a

以下代码可以通过。

#include<stdio.h>
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main(){
    int a[128] = { 0 };//记录字符对应的ascii码出现次数
    string s;
    getline(cin, s); // 或者把这一行改成 cin >> s,过滤就不用写了
    for (int i = 0; i <s.length(); i++) {
        if(s[i]=='\n'||s[i]=='\r')
            continue; // 过滤
        int x=s[i];
        a[x]++;
    }
    for (int i = 0; i <s.length(); i++) {
        if (a[s[i]] == 1) {//要找的字符
            cout << s[i];
            return 0;
        }
    }
    cout << "no";
        return 0;
}

by Eleveslaine @ 2023-03-07 21:48:10

@gzgdh5545 注意第二次循环时按照 s 的顺序来的


by Eleveslaine @ 2023-03-07 21:48:39

@SaintRelief 这 at 我干啥()可以 bdfs 吧(


by gzgdh5545 @ 2023-03-07 21:55:22

@Franz_Liszt 感谢大佬!!!


|