2010-04-26 82 views
0

我的任務由兩部分組成。首先,我必須創建100個元素的globbal char數組,並使用cin向它插入一些文本。之後計算字符數量,並創建與輸入文本長度相關的專用數組。我正在考慮以下解決方案:動態創建陣列

char[100]inputData; 

int main() 
{ 

    cin >> inputData >> endl; 

    int length=0; 
    for(int i=0; i<100; i++) 
    { 
      while(inputData[i] == "\0") 
      { 
       ++count; 
      } 
    } 
char c = new char[count]; 

我在想什麼好?

該任務的第二部分是在第一個程序中引入動態創建的指向所有插入字的指針數組。添加一個新單詞應該打印所有前面的單詞,如果下一個單詞沒有空格,則應該增加兩次inputData數組的大小。說實話,這對我來說有點太過分了。我如何創建指向詞的指針?我怎樣才能增加全局數組的大小而不失去其內容?用一些臨時陣列?

+3

這功課嗎? – 2010-04-26 21:57:07

+0

「我的任務包含兩部分,首先我要創建100個元素的全局字符數組」 - 不,你幾乎肯定不需要這樣做。 – 2010-04-26 22:01:20

+0

@Tom:我當然希望如此 - 否則它是完全瘋狂的(甚至作爲家庭作業,這是有點可疑的)。 – 2010-04-26 22:02:48

回答

2

不管你的問題的其餘部分,你似乎有關於while圈一些不正確的想法。我們來看看這段代碼。

for(int i=0; i<100; i++) { 
    while(inputData[i] == "\0") { 
     ++count; 
    } 
} 

首先,"\0"不是NUL字符。它是一個指向僅包含終止NUL字節的字符串的指針。您需要改爲'\0'。假設這種變化,仍然存在問題。讓我們的工作,通過會發生什麼:

  • 如何做一個while迴路工作?只要條件成立,它就會重複執行身體。
  • while循環何時完成?當通過執行主體最終使條件失效時。
  • 循環的條件是什麼? inputData[i] == '\0',更正後。
  • 身體是什麼? ++count
  • 可以++count有沒有改變條件的價值?不,因爲它不會改變i
  • 因此,如果inputData[i]不是NUL字節,則while循環從不執行。
  • 但是,如果inputData[i]是NUL字節,則while循環將永久執行。
  • 假設你已經讀入了inputData的正確字符串,那麼在某點inputData[i]將是NUL,並且你將會有一個無限循環。

要計算一個標準的C字符串的長度,只是這樣做

count = strlen(inputData); 

如果由於某種原因,你真的必須寫一個循環,那麼以下工作:

int len = 0, 
while (inputData[len] != '\0') { 
    len++; 
} 

循環後,len保存字符串的長度。

+0

不會。它可能會做,如果它說!='\ 0' – pm100 2010-04-26 22:41:26

+0

哎呀。編輯修復。 – 2010-04-27 10:53:13

0

全局數組不能動態更改大小,除非它們是指向數組的指針,在這種情況下,可以擦除它們並重新分配它們。

也許你想要的是一個自動調整大小的數組,就像一個std :: vector。您可以通過調用vector上的size()來查看數組中有多少個字母,並且可以通過調用resize()來增加數組的大小。

雖然不是最優雅的解決方案,但現在使用起來可能更容易一些。

1
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string input; 
    std::getline(std::cin, input); 
}