计算数组中唯一字符的函数

时间:2016-11-23 16:37:40

标签: c++ function loops boolean

我想要一个计算唯一字符数的函数。如果我有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");
}

函数始终返回零。这有什么问题?

3 个答案:

答案 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)

问题在于函数firstocch中的大括号(也许是因为一个不好的缩进,总是尝试正确地缩进你的代码,不是编译器而是你自己),以及函数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.