我有一个int数组,比方说...... 1000个元素。用户输入128,它将数组填充为821.在它说完之前,让我说,为了简化其他功能,它必须向后。为了得到我使用的长度
int count = 0;
for (int i = 0; array1[i] != '\0'; ++i)
{
count++;
}
这很有效。直到他们输入一个0为0的数字,例如0或100。 数组填充为001,但测试会立即停止,因为0等于'\ 0'
我不能使用sizeof(array1)/ sizeof(* array1),因为当我去打印数组时,我会得到大量的零,后跟数字。它确实打印正确,但它不是我想要的。
任何解决方案?
答案 0 :(得分:1)
我认为更好的方法是在使用之前用无效值(例如-1)填充整个数组。根据你的描述,通过说“无效”,它可以是除0-9之外的任何东西。
memset(array1, -1, sizeof(array1));
// doing things
为什么不将数字保存为字符,因为它们来自用户输入?只需使用'0'代替'\ 0'来表示零,所以你没有问题。如果您保证在数组末尾始终存在'\ 0',您甚至可以使用strlen
直接获取长度:
// array size is 1001 instead of 1000 to reserve a '\0' in the end
char array1[1001] = {'8', '2', '1'}
size_t count = strlen(array1);
答案 1 :(得分:0)
您需要做的是将数字转换为相应的字符。
让我们说,你有1230
。在您的数组中,您实际存储了1 + '0'
,2 + '0'
,3 + '0'
和'0'
。 '0'
是印有0
的密钥的ASCII值。
这样,您永远不会将'0'
与\0
混淆。
答案 2 :(得分:0)
您可以确定您的号码所具有的位数,然后使用计算出的大小动态分配数组。
答案 3 :(得分:0)
我能想到两种方法:
例如关于第一种情况:
char array1[1000];
int count = 0;
while(!the_end)
{
std::cin >> array1[count++]
}
// From now, every time you add elements to the array, increase the "size" variable
std::cout << "Size: " << count << std::endl;
对于第二种情况,有一些方法,但我认为最适合你的方法是在开始从用户那里获得输入之前用无效值来实现数组:
char array1[1000] = {-1};
// Start getting the input...
int count = 0;
for(int i = 0; array1[i] != -1; ++i)
{
count++;
}
std::cout << "Size: " << count << std::endl;
注意:如果您坚持这一点,那么您的代码可能存在一些设计缺陷。为了使设计更好,你将使用我建议的第一种方法,而不是试图找到后面的大小。或者更好的是,您可以按照评论中的建议使用std::vector
,或者至少可以对输入到数组的元素进行某种类型的“跟踪”。