如何处理c-string指针

时间:2013-10-03 18:10:44

标签: c++ loops pointers c-strings

我是C ++的新手,我已经尝试了所有我现在的研究,但到目前为止没有运气,这是我应该做的:

  • 在此作业中,您将允许用户输入一些简短的一行句子。
  • 每个句子都添加到500个字符的缓冲区中。
  • 确保缓冲区中的每个句子都以空终止。
  • 当每个句子被添加到此缓冲区时,将指针存储在char指针数组中。
  • 当用户输入零时,停止从用户那里获取输入并以相反的顺序显示缓冲区中的句子。
  • 注意,句子的顺序是相反的,而不是句子中的单词。例如,如果用户键入。

我目前仍然坚持第一部分。

int main () {
  int const SIZE = 500;
  char sentences[SIZE];
  char* pointers[SIZE];

  do {
   cout<<"Please enter small sentences, hit enter to continue or 0 to stop: "<<endl;
   cin.getline(sentences, 30);
   *pointers = sentences;
   cin.ignore();
 } while (!(cin.getline>>0));

 system ("PAUSE");
 return 0;

}

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

您不是在数组中附加字符,也不是在指针数组附加指针。

以下是您需要执行的一些步骤:
1.维护&#34;句子中的下一个可用位置的索引或指针。阵列。
2.从文件文件中读取字符串后,将其内容复制到&#34;句子中的下一个可用位置&#34;阵列。请参阅std :: string :: c_str()或std :: string :: data()以将字符串转换为&#34; char *&#34;。
3.维护指针数组中下一个可用位置的指针或索引 4.将句子指针复制到指针数组中的下一个可用位置 5.按字符串的长度推进句子指针 6.将指针指针前进一个。

未提供代码,因为这会破坏作业的目的。

答案 1 :(得分:0)

这是一个提示 - 声明基本数据,您需要使用方法来处理这些数据:

class Buffer       //buffer data combined with methods
{
private:
    char* buffdata;     //buffer to hold raw strings
    int buffsize;       //how big is buffdata
    int bufflast;       //point to null terminator for last saved string
    char** ray;         //declare ray[raysize] to hold saved strings
    int raysize;        //how big is ray[]
    int raycount;       //count how many strings saved
//methods here
public:
    Buffer() //constructor
    { // you figure out what goes here...
    }
    ~Buffer() //destructor
    { // release anything stored in buffers
    }
    add(char *str); //define method to add a string to your data above
    get(unsigned int index); //define method to extract numbered string from stored data
};

答案 2 :(得分:-1)

SPOILER ALERT

#include <cstring>
#include <iostream>

int main() {
  const int SIZE = 500;
  char sentenceBuffer[SIZE] = {0};
  char* sentences[SIZE / 2] = {0}; // shortest string is a char + '\0'
  int sentenceCount = 0;
  char* nextSentence = &sentenceBuffer[0];

  std::cout << "Enter sentences. Enter 0 to stop.\n";

  while (std::cin.getline(nextSentence, SIZE - (nextSentence - &sentenceBuffer[0]))) {
    if (0 == std::strcmp(nextSentence, "0")) {
      break;
    }
    sentences[sentenceCount] = nextSentence;
    ++sentenceCount;
    nextSentence += std::cin.gcount(); // '\n' stands in for '\0'
  }

  for (int i = sentenceCount - 1; i != -1; --i) {
    std::cout << sentences[i] << "\n";
  }

  return 0;
}