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

Function that counts unique characters in an array

本文关键字:函数 字符 唯一 数组 计算      更新时间:2023-10-16

我想拥有一个函数来计数唯一字符的数量。例如,如果我有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");
}

函数始终返回零。怎么了?

如果您的字符串始终遵循模式,当将相同的符号分组在一起时,则计数很简单:

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();
}

如果不允许std::set,并且不允许进行分组,则首先使用一个稍微修改:

int count_unique( std::string str )
{
     std::sort( str.begin(), str.end() );
     char last = 0;
     int count = 0;
     for( char c : str )
         if( last != c ) {
             last = c;
             ++count;
         }
     return count;
}

问题是在函数firstocch中的牙套(也许是因为不良的凹痕,请始终尝试正确地划定您的代码,而不是编译器,而是为您自己)条件为 t[i+1] != 0的函数 h的循环,应为 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。

您需要在行'C '。

然后在"返回C;"

之后立即卸下额外的支撑。

您的顶部也有一些不平衡的支架。我认为您的代码的工作版本是:

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;
}