忽略空白字符

时间:2012-03-09 01:14:16

标签: c++

我正在使用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';

    }   

}  

然而,由于空白,我无法假设这些整数总是处于同一指数。

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

另外,如果我有两位数字会怎么样?

3 个答案:

答案 0 :(得分:2)

让标准流为您完成:

inputData >> numberOfSiblings >> age;

答案 1 :(得分:1)

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;
}

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

std::ifstream input("people.txt");

data person;   
input >> person;

答案 2 :(得分:0)

有很多好的答案。

但是,我想如果你想使用& learn C ++,

你最好使用'<<'或'>>'以帮助您完成工作。

在答案中,他们使用覆盖操作符,您可以从HERE ||学习HERE