为了善良'这个代码看起来很简单,我只是无法弄清楚我哪里出错了。
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,没有,没有。它也使代码更短,更短。谢谢!
答案 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;
。