如何检查无符号字符向量是否包含所有空字符

问题描述

我需要检查向量是否包含所有空字符,然后根据该结果执行一些操作。我在堆栈溢出中发现了几个问题,但它们与我的要求不完全匹配。

我可以想到的一种确定所有空字符向量的解决方案是:

if(Buffer[0] == '\0') {
 std::cout<<"vector contains all NULL characters";
}

如果有更好的方法,请分享您的想法。

完整的代码是:

File1.cpp:

std::vector<unsigned char> Buffer(BufferSize,0);

File2.cpp:

try
{
    // do some operation,if no exception then fill the buffer
    // if exception then go to catch block
}
catch(...)
{
    memset(Buffer,'\0',BufferSize); 
}

然后,在File1.cpp中,我得到的是Buffer,里面填充了有效数据或'\ 0'。

这是在C ++ 98中

解决方法

您可以使用std::all_of()算法来检查所有元素是否都满足条件。 希望您也看到std::any_of()std::none_of()

int BufferSize = 30;
vector<unsigned char> Buffer(BufferSize,0);
bool is_clear = std::all_of(Buffer.cbegin(),Buffer.cend(),[](unsigned char c) {return c == 0; });

对于C++11不可用的情况,您可以这样实现any_of:

bool is_clear=true;
for(size_t i=0; i<Buffer.size(); ++i)
{
  if(Buffer[i]!=0)
  {
    is_clear=false;
    break;
  }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...