在C ++中删除char数组末尾的回车键值

时间:2013-01-15 10:30:06

标签: c++ arrays char

我有一个我想要读入的文本文件中的名称列表,然后输出回另一个文本文件。即:

101 Name 1
102 Name 2
103 Name 3

代码:

int studentID;
char name[MAX];
while (infile >> studentID)
      {
        infile.getline (name, MAX);
        outfile << left << setw(10) << studentID;
        outfile << left << setw(20) << name;
        outfile << left << setw(10) << "SKIPPED WORD";
      }

它将在文本文件中的名称后面的回车键中读取,然后当我想要输出另一个文本文件时它将转换回回车键,它将如下所示。

101 Name 1
SKIPPED WORD
102 Name 2
SKIPPED WORD
103 Name 3
SkIPPED WORD

这就是我想要的

101 Name 1 SKIPPED WORD
102 Name 2 SKIPPED WORD
103 Name 3 SKIPPED WORD

任何人都知道我如何删除char数组末尾的'enter'?

2 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题,最简单的方法可能就是开始使用std::getline代替istream::getlinestd::getline读取换行符,但不会将其附加到字符串中。

另一种解决方案是简单地检查读取字符串中的最后一个字符是否为换行符,然后将其更改为字符串终止符:

if (name[strlen(name) - 1] == '\n')
    name[strlen(name) - 1] = '\0';

答案 1 :(得分:1)

使用std::getline代替istream::getline,它不会在字符串中存储结束换行符(但会将其从流中删除)。

#include <string>

int studentID;
while (infile >> studentID)
{
    std::string name;
    std::getline(infile, name);

    outfile << left << setw(10) << studentID;
    outfile << left << setw(20) << name;
    outfile << left << setw(10) << "SKIPPED WORD" << '\n';
}

这样你就不再需要MAX,而且可以有任意长的名字。