#include<iostream>
using namespace std;
int main()
{
char arr[200];
while(1) {
cin >> arr;
int i = sizeof(arr);
cout << "The arr input is "<< arr
<< " and the size of the array is "<< i << endl;
}
return 0;
}
输入34, 此代码输出:arr输入为34,数组大小为200
虽然我希望它获得数组的已用空间的大小。所以对于最后一个输入我希望它输出:arr输入是34,数组的大小是2
有人可以告诉我怎么做?
答案 0 :(得分:4)
也许你想要strlen(arr)
。它必须以null结尾,否则cout << arr
将无效。
您需要#include <cstring>
答案 1 :(得分:1)
在一般情况下,没有自动的方法可以做你想要的事情 - 你需要以某种方式跟踪你自己的计数器,或者通过为数组播种'无效'值(你定义的)和搜索找到已使用元素的结尾(这就是C风格字符串中的'\ 0'终止符)。
在您发布的示例代码中,数组应该接收一个空终止的C风格字符串,您可以使用该知识来计算有效元素的数量。
如果您正在使用C ++或其他具有更高级数据结构的库,您可以使用一种能够跟踪此类事物的库(例如std::vector<>
)。
答案 2 :(得分:0)
数组的已用空间大小
没有这样的事情。如果你有一个200个字符的数组,那么你有200个字符。数组没有“已使用”和“未使用”空间的概念。它只适用于C字符串,因为它们以0字符终止。但话说回来,数组本身无法知道它是否持有C字符串。
答案 3 :(得分:0)
以较少参与的方式,你可以只计算每个字符,直到你只用一个while循环击中一个null。它将完成strlen()所做的完全相同的事情。另外,在实践中,你应该用cin进行类型检查,但我认为这只是一个测试。
#include <iostream>
using namespace std;
int main()
{
char arr[200];
int i;
while(1) {
cin >> arr;
i=0;
while (arr[i] != '\0' && i<sizeof(arr))
i++;
cout << "The arr input is "<< arr
<< " and the size of the array is "<< i << endl;
}
return 0;
}
答案 4 :(得分:0)
为了完整起见,这是一个更像C ++的解决方案,它使用std::string
而不是原始的char
数组。
#include <iostream>
#include <string>
int
main()
{
while (std::cin.good()) {
std::string s;
if (std::cin >> s) {
std::cout
<< "The input is " << s
<< " and the size is " << s.length()
<< std::endl;
}
}
return 0;
}
它不使用数组,但它是解决此类问题的首选方法。一般情况下,您应该尝试使用std::string
和std::vector
替换原始数组,原始指针包含shared_ptr
(scoped_ptr
或shared_array
,最重要的是适当的),snprintf
与std::stringstream
。这是简单编写更好的C ++的第一步。你将来会感谢你自己。我希望几年前我听过这个建议。
答案 5 :(得分:0)
试试吧
template < typename T, unsigned N >
unsigned sizeOfArray( T const (&array)[ N ] )
{
return N;
}