【发布时间】:2017-08-26 17:40:54
【问题描述】:
我正在尝试编写一个 c++ 程序来查找第一个不重复的字符,如果所有字符都重复,它将返回 -1。
我设计了一个解决方案,它使用一个整数数组来跟踪字符的计数,我使用必须存储其计数的相应字符来索引该数组。
程序 1: 给出错误的输出... http://ide.geeksforgeeks.org/wxOYog
#include<iostream>
#include<cstring>
using namespace std;
int map[256];
string returnFirstRepeatingChar(string str,int n)
{
int i=0,flag=1;
string result;
for(i=0;i<n;i++)
map[str[i]]++;
for(i=0;i<n;i++)
{
if(map[str[i]]==1)
{
flag=0;
result = str[i];
break;
}
}
if(flag)
return "-1";
else
return result;
}
int main()
{
//code
int t,N,*arr,i,j;
cin>>t;
string str;
while(t--)
{
cin>>N;
memset(&map,0,256);
cin>>str;
cout<<returnFirstRepeatingChar(str,N)<<endl;
}
return 0;
}
程序 2: 给出正确的输出... http://ide.geeksforgeeks.org/jJvJPu
#include<iostream>
#include<cstring>
using namespace std;
int map[256];
string returnFirstRepeatingChar(string str,int n)
{
int i=0,flag=1;
string result;
for(i=0;i<n;i++)
map[str[i]-97]++; //changed from above program
for(i=0;i<n;i++)
{
if(map[str[i]-97]==1) //changed from above program
{
flag=0;
result = str[i];
break;
}
}
if(flag)
return "-1";
else
return result;
}
int main()
{
//code
int t,N,*arr,i,j;
cin>>t;
string str;
while(t--)
{
cin>>N;
memset(&map,0,256);
cin>>str;
cout<<returnFirstRepeatingChar(str,N)<<endl;
}
return 0;
}
两个程序之间的唯一区别是数组映射中所需计数的位置。 在程序1中,从97开始(a的ascii) 在程序2中,它从0开始。
但是程序 2 给出了正确的输出,但程序 1 不是。为什么?
Eg: for input: abcdefghij
program 1 output: f
program 2 output: a
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有清晰的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。
-
期望的行为以第二种实现的形式明确给出。我需要的只是一个解释......
-
@PavithranRavichandiran,您不能指望人们点击他们从未听说过的网站的链接,也不能指望该链接无限期保持有效,也不能指望 Google 能够通过当很多问题被隐藏起来时,同样的问题。除此之外,SO 有自己的规则,在使用网站时遵守这些规则是有礼貌的。
-
好的。现在正确编辑。会有什么怜悯我吗?
-
@PavithranRavichandiran: 是的,仁慈向你展示了 :)
标签: c++ arrays string dictionary