【问题标题】:Concatenating character arrays in c++在 C++ 中连接字符数组
【发布时间】:2012-10-01 00:47:16
【问题描述】:

我被要求从标准中读取文件,例如:

./gscheck < testfile

其中 gscheck 是我编译的可执行文件的名称。无论如何,我需要使用函数 cin.getline() 将每一行读入一个字符数组。我知道该怎么做,

char line[250];
while (cin.getline(line, 250))
{
    Do stuff;
}

但最终,我不想每行做任何事情,我想将每一行连接成一个巨大的字符数组。如何使用上述方法创建一个更大的字符数组,其中包含按顺序排列的每一行并包含换行符,这样我基本上是从文件中“啜饮”,然后逐个字符地解析它,但不使用字符串类。

【问题讨论】:

  • 是什么限制了您使用std::string的能力?
  • 这是一项任务,要求我以这种愚蠢的方式完成它......
  • 使用cin.getline吗?可以做到,但会很邪恶。
  • 如果是作业,请将您的问题标记为这样
  • @catchmeifyoutry 如果您没有看到,那么正在尝试删除作业标签。见这里:meta.stackexchange.com/questions/147100/…

标签: c++ arrays string character


【解决方案1】:

那么这个怎么样:

char file[2000];
char *end=file+1998;
char *ptr=file;
while (!cin.eof() && ptr < end) {
  cin.getline(ptr, end-ptr)
  ptr += strlen(ptr);
  *ptr++ = "\n";
  *ptr = 0;
}

【讨论】:

    【解决方案2】:

    如果你有限制不使用动态内存,std::string 肯定会使用:

    char a[VERY_BIG_SIZE_ENOUGH_FOR_FILE];
    std::cin.read(a, VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1);
    a[VERY_BIG_SIZE_JUST_ENOUGH_FOR_FILE - 1] = '\0';
    

    【讨论】:

      【解决方案3】:

      根据@KerrekSB 的回答,您可以使用已弃用的std::ostrstream,它使用字符数组(实际上是char *,但使用strlen,您可以轻松地将其作为数组工作)。

      std::ostrstream oss;
      oss <<std::cin.rdbuf();
      return oss.str();
      

      【讨论】:

        【解决方案4】:

        别这样。

        说不。

        不要使用“字符数组”。

        说真的。

        使用std::string

        std::string result;
        
        for (std::string line; std::getline(std::cin, line); )
        {
            result += line;
        }
        

        但如果您只想读取 所有内容 而不是真正解析行(而是 preserve 换行),直接访问输入缓冲区可能更简单:

        std::ostringstream oss;
        oss << std::cin.rdbuf();
        return oss.str();
        

        【讨论】:

        • -1 这显然是一个家庭作业,初学者应该在默认使用 STL 之前使用较低级别的方法
        猜你喜欢
        • 1970-01-01
        • 2015-09-14
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2012-05-18
        • 2016-02-24
        • 1970-01-01
        • 2011-11-09
        相关资源
        最近更新 更多