1

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

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

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

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


更新!

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

4

4 回答 4

2
  if (chararray[i]=='\0' && i == 0){

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

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

打破第一个空值并停止计数。

还:

请改一下:

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

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

它应该是:

if (chararray[i]!='\0') {
      count ++;
于 2014-11-14T14:51:05.510 回答
2

您将问题命名为

计算空字符单元c ++

但是,正如在代码片段中看到的那样,当数组的元素不等于 '\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' ) );
于 2014-11-14T15:02:28.690 回答
1

假设 chararraychar []你可以简单地使用的类型std::count

auto num_items = std::count(  std::begin( chararray ),
                              std::end( chararray ), 
                              '\0' 
                            ); // returns 0 or number of occurrence
于 2014-11-14T15:00:52.633 回答
1

一个问题:

count = count ++;

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

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

或者...

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

试试++count;吧。

于 2014-11-14T15:01:27.923 回答