如何查找字符数组中非空项的数量.C++

How to find the number of non null items in a char array. C++

本文关键字:C++ 数组 何查找 查找 字符      更新时间:2023-10-16

我正在为我的计算机科学一门课程做一个项目,我在尝试获取包含字符值的数组的确切大小时遇到问题。首先,程序提示用户输入 char 值,方法是使用行cin.getline(array,100); 之后,它获取数组,然后传递给它一个 getSize 函数,该函数假设返回数组的实际大小。唯一的问题是它并不矛盾。有时它返回正确的值,但有时它不会。获取大小函数:

int getSize(char arr[]){
    int i = 0;  
    for(i; '' != arr[i];i++){ 
    }
    return i;
}

例:arr[100] 包含 5 个字符,其余为空,但当程序运行时,该函数返回 7。我不确定这是否是一个问题,但是程序在将数组发送到 size 函数之前对其进行了修改。它会删除重复项。

由于您正在处理数组,请使用 strlen 函数

strlen(array);
请注意,对于

字符串,还有一个更C++的 getline 重载(面向对象等)

std::string line;
std::getline(std::cin, line);
size_t len = line.length();
template<size_t t_size>
size_t GetRealSize(const char (&str)[t_size])
{
    return std::count_if(&str[0], &str[t_size], [](char c) { return !!c; });
}

这可能是你想要的。

这不能仅通过指针来完成。指针不包含有关数组大小的信息 - 它们只是一个内存地址。由于数组在传递给函数时会衰减为指针,因此会丢失数组的大小。

一种方法是使用Templates

template <typename T, size_t N>
size_t array(const T (&buffer)[N])
{
cout << "size: " << N << endl;
return N;
}

然后,您可以像这样调用该函数(就像任何其他函数一样):

int main()
{
char a[10];
array(a);
}

输出:

size: 10

您可以轻松地使用sizeof()运算符来获取大小,...

如果你有char a[10];

int size=sizeof(a);