计算数组中唯一字符的函数
Function that counts unique characters in an array
我想拥有一个函数来计数唯一字符的数量。例如,如果我有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;
}
问题是在函数firstocc
和h
中的牙套(也许是因为不良的凹痕,请始终尝试正确地划定您的代码,而不是编译器,而是为您自己)条件为 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;
}
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 将字符随机转换为大写的函数
- 固有构造函数的字符和访问级别
- constexpr 函数获取常量字符*
- 将字符缓冲区强制转换为函数指针
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 将字符串数组传递给接受常量字符**的函数
- 在函数中返回无符号字符数组,但不返回指针
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 在函数 strcpy() 中访问字符数组时出现分段错误
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 自定义 std::fstream,std::filebuf 的溢出和下溢函数未为每个字符调用
- 如何在字符函数中选择某些字符?
- 使用排序函数 c++ 对字符数组进行排序
- 使用 memcpy 函数C++复制字符数组
- C++返回反向字符数组的函数
- 模板总和函数冻结字符
- 在函数内初始化无符号字符指针将返回空指针
- C++ 错误:与调用<类构造函数(字符*&、字符*&、字符*&、字符*&)不匹配