#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
string A;
bool s=0;
while(getline(cin,A))
{
for(int i=0;i<A.size();i++)
{
if(A.find(A[i])==A.rfind(A[i]))
{
cout<<A[i]<<endl;
s=1;
break;
}
}
}
if(s==0)
cout<<"no"<<endl;
return 0;
}
从前往后查找与从后向前查找同一个字符,如果位置一样那该字符就直出现一次,因为是从第一个开始查找所以找出的是第一个只出现一次的字符
上面代码具体实现方法如下:
竟然还有rfind这个函数啊,不错学习了。
那兄弟不留一个赞 /xyx
感谢大佬的赞 Orz
我比较喜欢这样写哈哈。
请问为什么alphabet的数组一定要定义在main函数外面,我试过定义在里面不行
当该数组定义在main函数外面时,有的编译器会帮你自动赋值,即赋给该数组的每个元素值为0;假如要在main函数里面定义数组,可考虑附加一个memset函数为其赋值。
好的,谢谢!
也可以定义在main里,定义的数组需要赋初值
当前字母对应字母表自增,eg:’a’-‘a’ = 0,请问这个是什么意思?
字母表设定初值均为0,26个字符即长度,下标从0到25与a到z一一对应,当扫描到某个字母时要获取对应下标,才能使字母表中对应的字母数量加一,最后从字母表中了解到各个字母统计了多少
要获取对应下标是什么意思?谢谢
获取下标其实是相对获取,我想你应该是对ASCII码不熟悉,我的eg中说明a
字符减a字符,其实是利用了这个码的相对位移来获取下标
如果这个差值几次一样,就说明是一个位置,那么不是出现一次?谢谢
你可以用一段字符串编程尝试一下,实践出真知,晚安
这样的话用map应该不错
大佬太强了!
数据不是都到10的5次方了吗,为什么n方的复杂度能过啊
小于啊,最大一亿吧
s=1;
break; 这个终止读入太牛逼了
感觉可以第一个break直接return
是的,return 0就好了
return 0 可以不用再判断
牛逼啊就是看不懂
大佬,我仿照着你的写了一遍,编译能过,但是为啥啥也不输出啊,请教!!!
#include[HTML_REMOVED]
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
int main()
{
string a;
bool b=0;
while(getline(cin,a))
{
for(int i=0;i<a.size();i++)
{
if(a.find(a[i])==a.rfind(a[i]))
cout<<a[i]<<endl;
b=1;
break;
}
}
if(b==0)
cout<<”no”;
return 0;
}
例如aabbbcdd----->遍历b时,遍历三次都为(2,4);
#include [HTML_REMOVED]
using namespace std;
int main()
{
string s;
cin>>s;
int n=0;
for(int i=0;i<s.length();i++){
if(s.find(s[i])==s.rfind(s[i])){
n=1;
cout<<s[i]<<endl;
break;
}
}
if(n==0) cout<<”no”<<endl;
return 0;
}
为啥布尔能这样玩?
卧槽大佬这思路好强,做题前才看过rfind()函数,不过压根想不到可以用上
没想到还能用find受教了。
很赞
太强了大佬,学习了
可以提早return吗
学习了
orz
女少口可!