簡體   English   中英

C ++使用零和空值檢查數組的長度

[英]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混淆。

您可以確定數字的位數,然后以計算出的大小動態分配數組。

我可以想到兩種方法:

  1. 您在用戶輸入每個元素后增加大小
  2. 您用用戶永遠不會輸入的數字標記結尾

例如第一種情況:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM