我想要一个计算唯一字符数的函数。如果我有aabbcc
,我希望它返回3
。如果aab
我希望2
等等......
我的尝试是构建一个函数,检查数字是否先前出现,然后将其作为if
条件。
我的代码是:
bool firstocc(char* t, int i){
for(int j = 0;j < i;j++){
if(t[j] == t[i]) return false;
return true;
}
}
int h(char* t){
int c=0;
for(int i=0; t[i+1]!=0;i++){
if(firstocc(t,i)){
c++;
}
return c;
}
}
int main()
{
cout<< h("aabbc");
}
函数始终返回零。这有什么问题?
答案 0 :(得分:2)
如果您的字符串始终遵循模式,当相同的符号组合在一起时,则计数很简单:
RecurringInterval
如果不是强制性分组使用self.rrule
:
int count_unique( const std::string &str )
{
char last = 0;
int count = 0;
for( char c : str )
if( last != c ) {
last = c;
++count;
}
return count;
}
如果不允许std::set
且没有分组,则使用稍加修改的第一个:
int count_unique( const std::string &str )
{
return std::set<char>( str.begin(), str.end() ).size();
}
答案 1 :(得分:0)
你需要在“c ++&#39;。”之后添加一个额外的右括号。
然后在&#39;返回c;&#39;
之后立即删除额外的支撑顶部还有一些不平衡的支架。我认为您的代码的工作版本是这样的:
bool firstocc(char* t, int i){
for(int j=0;j<i;j++){
if(t[j]==t[i])
return false;
}
return true;
}
int h(char* t){
int c=0;
for(int i=0; t[i]!=0;i++){
if(firstocc(t,i)){
c++;
}
}
return c;
}
int main(int argc, char *argv[]) {
std::cout<< h("aac") <<std::endl;
return 0;
}
答案 2 :(得分:0)
问题在于函数firstocc
和h
中的大括号(也许是因为一个不好的缩进,总是尝试正确地缩进你的代码,不是编译器而是你自己),以及函数h
的循环,其中条件为t[i+1] != 0
且应为t[i] != 0
(包括最后一个字符)。
代码应为:
bool firstocc(char* t, int i){
for(int j=0;j<i;j++)
if(t[j]==t[i])
return false;
return true;
}
int h(char* t){
int c=0;
for(int i=0; t[i]!=0;i++)
if(firstocc(t,i)){
c++;
}
return c;
}
我用"aabbcddddeaa"
测试了它,它返回5.