2014-03-25 14 views
-2

我似乎無法理解此程序的期望。誰能幫我?我是一個絕對無能的第一年學生。包括指針在內的C++作業

編寫一個讀取文本行並將它們附加到char緩衝區[1000]的程序。通過調用cin.get(ch)一次讀取一個字符,其中ch是char類型的變量。使用輸入重定向。閱讀1,000個字符後停止。在閱讀文本時,將所有換行符'\ n'替換爲'\ 0'結束符。建立一個數組char * lines [100],以便該數組中的指針指向文本中行的開始。如果輸入有更多的行,則只考慮100個輸入行。然後以相反的順序顯示行,從最後一行輸入行開始。 這是我到目前爲止有:

#include <iostream> 

using namespace std; 

int main() 
{ 
    const int BUFFER_CAPACITY = 1000; 
    const int LINES_CAPACITY = 100; 
    char buffer[BUFFER_CAPACITY]; 
    char* lines[LINES_CAPACITY]; 

    int buffer_position = 0; 
    int lines_position = 0; 

    bool more = true; 
    bool newline = true; 
    while (more) 
    { 

     char c = cin.get(); 
     if (cin.fail()) 
     { 
     more = false; 
     } 
     else if (buffer_position >= BUFFER_CAPACITY) // at (or above) capacity 
     { 
     more = false; 
     } 
     if (newline) 
     { 
     if (lines_position < LINES_CAPACITY) 
     { 
      lines[lines_position] = buffer + buffer_position; 
      lines_position++; 
      newline = false; 
     } 
     else { more = false; } 
     } 
     if (more) 
     { 
     if (c == '\n') 
     { 
      buffer[buffer_position] = '\0'; 
      buffer_position++; 
      newline = true; 
     } 
     else 
     { 
      buffer[buffer_position] = c; 
      buffer_position++; 
     } 
     } 
    } 

    buffer[BUFFER_CAPACITY - 1] = '\0'; 

    for (int i = lines_position - 1; i >= 0; i--) 
    { 
     cout << lines[i] << endl; 
    } 

    return 0; 
} 
+1

到目前爲止你有什麼?你幾乎可以通過閱讀問題陳述來編寫代碼。 –

+0

推薦閱讀:http://ericlippert.com/2014/03/21/find-a-simpler-problem/ – Steve

回答

2

1)首先,使用高級語言,如「C++」的整點之一是從對付「指針」讓你離開 (除非絕對必要)。或者,就此而言,讓您遠離低級C字符串。所以,這聽起來像一個介紹性課程:(

2)有關「改變'\ n'到'\ 0'」意味着每次你點擊「返回」 - 獲取一個新行 - 在你的輸入中,你會把它當作緩衝區中的一個單獨的字符串。

3)你需要

#/字符輸入計數器至今(#/次,你已經做了 「CIN」 和讀取一個字符,最多1000)

#/線到目前爲止(#/次,你讀過 '\ n',最多100個)

#/字(#/你已經添加 '\ 0' 時間到您的緩衝區)

0

所以,它聽起來像你的老師希望你閱讀一段文本並將其放入緩衝區[1000],將每行文本的結尾(應該是換行符r)轉換爲以空字符結尾的字符串,然後將每個新創建的字符串放入行[100]中 - 檢查您是否超出任一數組的邊界。

所以你的算法會是這樣

  • 讓本地的char *指向您的新的字符串(你讀入緩衝區的第一個字符)
  • 字符讀入緩衝區的開始,直到找到一個換行符
  • 用空
  • 店更換新行關閉的char *成線
  • 點當地的char *到下一個字符(新行的開始),並重復這一方法U你或者打1000個字符,100行,或者到達文本的末尾