2014-03-25 15 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行,或者到达文本的末尾