输出一串字符中第一个只出现一次的字符不能使用whilefor循环
//这是昨晚uc笔试的最后一道算是算法题吧.
<pre code_snippet_id=”346769” snippet_file_name=”blog_20140515_3_1928683” name=”code” class=”cpp”>//goto的写好了,预约了教练去练车了,递归的晚上回来再写。
<pre code_snippet_id=”346769” snippet_file_name=”blog_20140515_5_893881” name=”code” class=”cpp”>//输出一串字符中第一个只出现一次的字符
//如输入为abaccdff 输出b
//不能使用库函数以及for/while循环
//其实一开始也想到用递归代替循环,但是后来想想好像goto也可以实现,
//而且觉得goto比较简单,然后就用了goto
//回来的时候感觉考官想考我们的不是goto,应该是想考我们的递归,我去,果断坑了
#include
#include
#include
using namespace std;
int goTo(const char *str)
{
int i=0,j=1;
int len=strlen(str);//获取长度
//不常用goto,都忘了格式了!
loop:
//当时忘记判断这一个了
if(i==j)//忘了判断不能自身比较了
{
if(i==len-1)//这个也忘记判断了,当这是最后一个字符而且与前面都不同时
{
cout<<str[i]<<endl;
return 0;
}
j++;
if(j==len)//如果str[i]已经和当前每一个都比较过了
{
i++;//比较下一个
if(i==len)//如果没有下一个
return 1;
}
goto loop;
}
//if(strcmp(str[i],str[j])!=0)//逐个比较,如果不相等
//strcmp() 忘了这个是比较字符串的了
if(str[i]==str[j])
{
i++;//比较下一个
j=0;//令j重置为0//怎么我当时好像改成了j=i+1;
if(i==len)//如果没有下一个
return 1;
goto loop;//否则继续比较
}
else
{
j++;
if(j==len)//如果str[i]已经和当前每一个都比较过了
{
//此时说明该字符只出现了一次
cout<<str[i]<<endl;
return 0;
}
else
goto loop;//否则继续下一次比较
}
}
int main()
{
char *s=”cceef”;
goTo(s);
cin.get();
return 0;
}
递归解法
//递归思想
//其实跟goto是一样的思想
//不过设多两个变量i,j用于指示要比较的字符和正在比较的字符传递给递归函数
#include
using std::cout;
using std::endl;
using std::strlen;
using std::cin;
#define ERROR ‘-1’//倘若没有任何一个匹配
char digui(const char *str,int i,int j)
{
int len=strlen(str);
if(i==j)//如果i=j,则不与自身比较
{
if(i==len-1)//但如果是i=j=len-1,说明最后一个只在最后出现了一次,输出
return str[i];
else//否则,跳过i=j,j++
{
j++;
digui(str,i,j);//进入下一次递归
}
}
else if(str[i]==str[j])//倘若一个字符出现两次
{
//cout<<”i=”<<i<<” “<<”j=”<<j<<” “<<(int*)(&str[i])<<” “<<(int*)(&str[j])<<endl;
i++;//进行下一个字符比较;
if(i==len)
{
cout<<”没有一个只出现一次的字符”<<endl;
return ERROR;
}
else
{
j=0;//重置j=0;
digui(str,i,j);
}
}
else//否则,移动j,继续比较,知道j=len;
{
j++;
if(j==len)//如果比较到了最后都不相等
{
//cout<<str[i]<<endl;
return str[i];
}
else//还没到最后
{
digui(str,i,j);
}
}
}
int main()
{
char *s=”cceet”;
cout<<digui(s,0,0);
cin.get();
return 0;
}
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/输出一串字符中第一个只出现一次的字符不能使用wh/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!