忽略空白字符

Ignoring Whitespace characters

本文关键字:字符 空白      更新时间:2023-10-16

我正在使用getline从一个看起来像的输入数据文件中抓取行

1 9
5 5
6 7
...

其中第一个数字是某人的兄弟姐妹数量,第二个数字是某个人的年龄。

const int MAXLINE=50;
int main(int argc, char *argv[]) {
    int numberOfSiblings;
    int age;
    char oneline[MAXLINE];  
    ifstream inputData;
    inputData.open(argv[1]);
    while ( !(inputData.eof()) ) {
        inputData.getline(oneline, MAXLINE);
        numberOfSiblings = oneline[0] - '0';
        age = oneline[2]-'0';
    }   
}  

然而,由于空白,我不能假设这些int总是在同一索引处。

因为如果有两个空格,而不是一个年龄,现在将在索引3中。我该怎么解释?

另外,如果我有一个两位数的数字,会发生什么?

让标准流为您做这件事:

inputData >> numberOfSiblings >> age;

std::istream已经有operator>>可以跳过任何前导空格,然后为您读取一个int。这似乎是你需要的,所以我就用它。

如果我这样做,我会从一个表示一个人数据的结构开始:

struct data { 
    int num_siblings;
    int age;
};

然后我会写一个函数来读取其中一项:

std::istream &operator>>(std::istream &is, data &d) { 
    return is >> d.num_siblings >> d.age;
}

这样,您就可以使用operator>>:从流中读取data项目

std::ifstream input("people.txt");
data person;   
input >> person;

有很多不错的答案。

但是,我认为如果你想使用&学习C++、

你最好使用'<lt;'或'>>'来帮助您完成工作

在回答中,他们使用了覆盖运算符,您可以从HERE|| HERE学习。