0

例如,我有一个文件

M
4
2
//comments
.#..

它通过标准输入提供给程序。我不能使用 fstream,只能使用 iostream。

如果我想一个字一个字地阅读整件事,我可以做吗?

char first_letter, first_num, second_num;
cin >> first_letter;
cin >> first_num;
cin >> second_num;

还是行尾会弄乱cin?如,cin 在读取第一个字母的 M 后是否知道它需要走到最后一行?

其次,我不想阅读评论行。我的计划是,如果我看到 / 我将使用 getline 来“删除”该行,然后移至 . # . . 并将它们存储在我的数组中。那会是最好的方法吗?

4

1 回答 1

1

首先,流默认跳过空格(空格、制表符、换行符),因此这部分很容易。

现在,关于注释行,这有点复杂。您可以使用 std::getline() 读取一行。这会将行存储在字符串中并丢弃尾随的换行符。但是,如果您例如在上面的代码中读取了第一个字母,则换行符仍保留在流中,因此 getline() 将读取一个空字符串。简而言之,不要混合基于行和基于标记的输入。

在实践中,您读取一行并手动解析它,或者为此创建一个流:

while(getline(in, line)) {
    if(line.empty()) continue; // empty line
    if(line[0] == '#') continue; // comment line
    // parse line
    std::stringstream s(line);
    char c;
    s >> c;
} 
于 2013-01-27T16:55:07.280 回答