2012-09-28 35 views
0

我有一個int數組,讓我們說... 1000個元素。用戶輸入128,它將數組填充爲821.在說出之前,讓我說,爲了簡化其他函數,它必須倒退。爲了得到我使用的長度C++用零和空值檢查數組的長度

int count = 0; 
    for (int i = 0; array1[i] != '\0'; ++i) 
    { 
     count++; 
    }  

這個很好用。直到他們輸入數字爲0,例如0或100。 該數組填充爲001,但由於0等於'\ 0',所以測試立即停止它。

我無法使用sizeof( array1)/ sizeof(* array1)因爲然後當我去打印數組時,我得到大量的零和數字。它打印正確,但它不是我想要的。

任何解決方案?

+1

你需要做的是將數字轉換爲相應的字符。 – Hindol

+4

它**有**是一個數組嗎?使用'vector '會更加C++方式,而且更不痛苦。 '矢量'具有可以告訴你它的容量和元素數量的方法。 –

+1

爲什麼不只有一個跟蹤有多少有效數字的變量?或者我錯過了什麼? –

回答

1

我認爲更好的方法是在使用它之前用無效值(例如-1)填充整個數組。根據您的描述,通過說「無效」可以是除0-9之外的任何內容。

memset(array1, -1, sizeof(array1)); 
// doing things 

爲什麼你不只是這些數字保存爲字符,因爲它們是從用戶輸入?只需使用'0'而不是'\ 0'來表示零,所以你沒有問題。你甚至可以在陣列的末尾使用strlen直接獲得的長度,如果你能保證總是有「\ 0」:

// 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); 
+0

這將不起作用,因爲'array1'是一個___字符數組____(我認爲)。編輯:我沒有注意到'0-9部分除外。 – Hindol

0

你需要做的是數字轉換成相應的字符。

可以說,你有1230。在你的陣列中,你實際上存儲了1 + '0'2 + '0',3 + '0''0''0'是印有0的密鑰的ASCII值。

這樣你永遠不會混淆'0'\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,或者至少可以對輸入到數組的元素進行某種類型的「跟蹤」。

+0

其實不,它不會,我的斷言功能是防止負數。 – ArooKonas

+0

所以我會只使用array1 [i] = 0xFF或'0xFF'或'0xFF'?我知道它應該屬於哪個插槽,但我不確定如何將它應用到陣列。 – ArooKonas

+0

然後您可以使用'unsigned char'和數字'0xFF',這是您可以從中獲得的最大值。 –