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 感谢大佬!!!