用c++语言编写一个程序:如何在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母。例如:
addbccadfeg字符串则输出b;addbccabfeg字符串则输出f;求各位大神指点,很急。...
addbccadfeg字符串则输出b;
addbccabfeg字符串则输出f;
求各位大神指点,很急。 展开
addbccabfeg字符串则输出f;
求各位大神指点,很急。 展开
3个回答
展开全部
有一个奇怪的问题,等会写程序
采用函数的形式完成查找,编译效果和代码,满意请采纳:
#include<iostream>
#include<string>
using namespace std;
void find(string a)
{
int a1[100]={0};
for(int i=0;i<a.length();i++)
a1[a[i]-65]++;
for(int i=0;i<a.length();i++)
{
if(a1[a[i]-65]==1)
{
cout<< a << " 第一个不重复的字母: "<< a[i] << endl;
break;
}
}
}
int main()
{
//addbccadfeg字符串则输出b;
//addbccabfeg字符串则输出f;
string a="addbccadfeg";
string b="addbccabfeg";
find(a);
find(b);
system("pause");
return 0;
}
更多追问追答
追问
可以解释一下吗?
追答
for(int i=0;i<a.length();i++)
a1[a[i]-65]++;
上面的两句,统计26个字母,分别出现的次数,出现一次就 ++ ,增加一个计数;
字母出现一次的,数组内是 1
字母出现二次的,数组内就是 2 ,依次类推,出现几次,就是几
if(a1[a[i]-65]==1)
{
cout<< a << " 第一个不重复的字母: "<< a[i] << endl;
break;
}
上面这几句,是对统计后做第一个的查找,出现一个字符的,数组内是 1;
if(a1[a[i]-65]==1),这句就是实现一个字母出现一次的判断;
cout<<a[i],就是讲这个字母显示出来。
不知道是不是说明白了!!
请看截图,黄圈的地方:
还有什么问题吗
展开全部
#include <iostream>
using namespace std;
void f(char* s)
{
int cnt,i,l;
char* s1;
l=strlen(s);
for(i=0;i<l;i++)
{
s1=s;
cnt=0;
while(*s1)
{
if(*s1==s[i])
{
cnt++;
if (cnt>1)
break;
}
s1++;
}
if(cnt==1)
{
cout<<s<<": "<<s[i]<<endl;
return;
}
}
cout<<s<<": "<<"没找到"<<endl;
}
int main()
{
f("addbccadfeg");
f("addbccabfeg");
f("aabbccdd");
return 0;
}
运行结果:
addbccadfeg: b
addbccabfeg: f
aabbccdd: 没找到
请按任意键继续. . .
追问
能解释一下思想吗?
追答
外层循环依次读取字符串的字符,然后内层循环将该字符与字符串的每个字符比较,相同则计数+1,计数如果大于1则计数清0,开始下一轮外层循环也就是比较下一个字符 ,如果内循环结束后计数为1,则说明找到,结束函数(return) ,全部比较完后计数不为1,则说明没有符合条件的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream.h>
#include <string.h>
#pragma argsused
char strnchr(char *str)
{
char *p1,*p2;
p1=str;p2=p1+1;
while(*p2)
{
if(strchr(p2,*p1))
{
p1++;
p2++;
}
else return *p1;
}
return (char)0;
}
int main()
{
char *s1="addbccadfeg";
char *s2="addbccabfeg";
char c;
if(c=strnchr(s1))cout<<s1<<"第一个不重复的字母:"<<c<<endl;
if(c=strnchr(s2))cout<<s2<<"第一个不重复的字母:"<<c<<endl;
system("pause");
return 0;
}
#include <string.h>
#pragma argsused
char strnchr(char *str)
{
char *p1,*p2;
p1=str;p2=p1+1;
while(*p2)
{
if(strchr(p2,*p1))
{
p1++;
p2++;
}
else return *p1;
}
return (char)0;
}
int main()
{
char *s1="addbccadfeg";
char *s2="addbccabfeg";
char c;
if(c=strnchr(s1))cout<<s1<<"第一个不重复的字母:"<<c<<endl;
if(c=strnchr(s2))cout<<s2<<"第一个不重复的字母:"<<c<<endl;
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询