用c++语言编写一个程序:如何在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母。例如:

addbccadfeg字符串则输出b;addbccabfeg字符串则输出f;求各位大神指点,很急。... addbccadfeg字符串则输出b;
addbccabfeg字符串则输出f;
求各位大神指点,很急。
展开
 我来答
cjj796
2013-10-10 · TA获得超过8703个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3385万
展开全部

有一个奇怪的问题,等会写程序

采用函数的形式完成查找,编译效果和代码,满意请采纳:

#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],就是讲这个字母显示出来。

不知道是不是说明白了!!


请看截图,黄圈的地方:

还有什么问题吗

庄政警
2013-10-10 · TA获得超过9916个赞
知道大有可为答主
回答量:1113
采纳率:94%
帮助的人:868万
展开全部
#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,则说明没有符合条件的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友72165e1
2013-10-10 · TA获得超过2169个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:410万
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式