[英]C++ Check the length of an array with Zeros and nulls
我有一個int數組,可以說... 1000個元素。 用戶輸入128,然后將其填充為821。在說之前,我要說,為了其他功能的簡化,它必須向后。 為了得到我使用的長度
int count = 0;
for (int i = 0; array1[i] != '\0'; ++i)
{
count++;
}
這很好。 直到他們輸入其中帶有0的數字(例如0或100)。該數組填充為001,但是測試立即將其停止,因為0等於'\\ 0'
我不能使用sizeof(array1)/ sizeof(* array1),因為當我去打印數組時,會得到大量的零,后面是數字。 它確實可以正確打印,但不是我想要的。
有什么辦法嗎?
我認為一種更好的方法是在使用它之前用無效值(例如-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);
您需要做的是將數字轉換為相應的字符。
可以說,您有1230
。 在您的數組中,實際上存儲了1 + '0'
, 2 + '0'
, 3 + '0'
和'0'
。 '0'
是鍵上的ASCII值,上面印有0
。
這樣,您就不會將'0'
與\\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
,或者至少可以對輸入到數組的元素進行某種“跟蹤”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.