【问题标题】:count empty char cells c++计算空字符单元格c ++
【发布时间】:2014-11-15 01:37:38
【问题描述】:

看在上帝的份上,这似乎是一段如此简单的代码,我就是不知道哪里出错了。

int count = 0;
 for (int i = 0; i<10;i++){
    if (chararray[i]=='\0' && i == 0){
        cout << "Empty \n";
        break;
    }
    if (chararray[i]!='\0') {
        count = count ++;
    }
 }
cout << "Deleted " << count << "elements \n";

所以基本思想是它遍历数组,如果它是空的,则返回“Empty”,如果不是,则计算所有非空单元格并返回其中有多少。如果它有什么不同,我把它放在解构方法下。

通常它工作正常,它只是计数不正确。它要么全部计数,要么不计数。


更新!

谢谢大家!我用++count 删除了count = count++ 行,它显示的结果比以前更正确,但不是针对所有测试值(我保证不会再犯同样的错误)。事实上,我接受了使用 strlen 函数的建议,因为没有特别需要 0 来代替,好吧,什么都没有。它还使代码变得非常短。谢谢!

【问题讨论】:

  • chararray 是如何填充的?您是否明确将任何字符设置为'\0'?也许部分数组未初始化?
  • 你看size_t strnlen(const char *s, size_t maxlen)了吗?
  • count = count ++; 转换为简单的count++;
  • 你想做什么,这意味着“它要么全部计数要么不计数”
  • @Cyber​​ 不,我没有明确地将任何数组值设置为 '\0',我搜索了 char 数组中空值的解决方案,这是提供的 NULL 等价物之一。

标签: c++ arrays isnullorempty


【解决方案1】:

您将问题命名为

计算空字符单元 c++

但是正如在代码 sn-p 中看到的那样,当数组的元素不等于 '\0' 时,计数会增加

if (chararray[i]!='\0') {
    count = count ++;
}

那么你要计算的空字符单元格是什么?

考虑到这个声明

    count = count ++;

具有未定义的行为,因为应用运算符 ++ 的副作用没有相对于左操作数赋值进行排序。

如果数组包含一个字符串,并且你想知道它是否为空以及字符串中有多少个字符,那么你应该使用标准C函数strlen

如果数组不包含字符串并且值 '\0' 的元素可以在数组的任何位置,那么 tp 计数非零元素您应该使用标准算法 std::count_if

例如

#include <algorithm>
#include <functional>

//..

int n = std::count_if( chararray, chararray + 10, 
                       std::bind2nd( std::not_equal_to<char>(), '\0' ) );

【讨论】:

    【解决方案2】:
      if (chararray[i]=='\0' && i == 0){
    

    此行查找空值,然后检查它是否位于索引0
    试试这个:

    if(chararray[i]==`\0`){
    

    中断第一个空值并停止计数。

    还有:

    请改一下:

     if (chararray[i]!='\0') {
          count = count ++;
    

    这是未定义的行为 (UB),很可能无法按预期工作或在稍后的某个时间点中断。

    应该是:

    if (chararray[i]!='\0') {
          count ++;
    

    【讨论】:

    • 代码需要测试 null char 以停止计数,然后它应该检查 count 是否为 0 并相应地显示其消息。
    • 然后在最后放一个`if (!count){std::cout
    【解决方案3】:

    假设chararray 具有char [] 类型,您可以简单地使用std::count

    auto num_items = std::count(  std::begin( chararray ),
                                  std::end( chararray ), 
                                  '\0' 
                                ); // returns 0 or number of occurrence
    

    【讨论】:

      【解决方案4】:

      一个问题:

      count = count ++;
      

      是未定义的行为:它可能导致类似...

      tmp = count; // count == 0 
      count++; 
      count = tmp; // count == 0  
      

      或者...

      tmp = count; // count == 0
      count = tmp;
      count++;     // count == 1
      

      改用++count;

      【讨论】:

        猜你喜欢
        • 2013-07-22
        • 2022-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 2022-11-27
        • 2018-07-22
        • 1970-01-01
        相关资源
        最近更新 更多