count空char char c ++

时间:2014-11-14 14:46:37

标签: c++ arrays isnullorempty

为了善良'这个代码看起来很简单,我只是无法弄清楚我哪里出错了。

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

所以基本的想法是它通过数组,如果它是空的,那么返回&#34;空&#34;如果没有那么它会计算所有非空单元格并返回其中有多少单元格。如果它有任何区别,我将其置于解构器方法之下。

一般来说它运作正常,它只是赢得了正确的COUNT。它要么全部要么全部都没有。


UPDATE!

谢谢大家!我用count = count++删除了++count行,它显示的结果比以前更正确,但并不是所有测试值(我保证不再犯同样的错误)。事实上,我接受了使用strlen函数的建议,因为没有特定的需要代替0,没有,没有。它也使代码更短,更短。谢谢!

4 个答案:

答案 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 ++;

答案 1 :(得分:2)

您将问题命名为

  

计算空char单元c ++

然而,正如在代码片段中看到的那样,当数组的元素不等于&#39; \ 0&#39;

时,计数会增加
if (chararray[i]!='\0') {
    count = count ++;
}

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

考虑到这个陈述

    count = count ++;

具有未定义的行为,因为相对于左操作数赋值,应用operaator ++的副作用不是有序的。

如果数组包含一个字符串,并且您想知道它是否为空以及字符串中有多少个字符,那么您应该使用标准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 :(得分:1)

假设chararray类型为char [],您只需使用std::count

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

答案 3 :(得分:1)

一个问题:

count = count ++;

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

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

...或

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

请尝试++count;