2

嘿,所以我必须从文本文件中获取值,但是这些值并不独立,它们都写成这样:

人口规模:30

在':'之后我可以从c ++中读取任何方法吗?我试过使用 >> 运算符,如:

string pop;
inFile >> pop;

但是当然,空格会在语句到达数字之前终止语句,并且出于某种原因使用

inFile.getline(pop, 20);

给了我很多错误,因为它出于某种原因不想直接写入字符串。我真的不想使用 char 数组,因为这样就不会那么容易测试数字并单独从中提取字符串。那么无论如何我可以将getline函数与字符串一起使用吗?是否可以从“:”字符之后读取?

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <cstdlib>

using namespace std;
int main()
{
    string fname;
    cin >> fname;
    ifstream inFile;
    inFile.open(fname.c_str()); 
    string pop1;
    getline(inFile,pop1);
    cout << pop1;
    return 0;
}

好的,这是我使用新 getline 的代码,但它仍然没有输出任何内容。它确实正确打开了文本文件,并且可以与 char 数组一起使用

4

2 回答 2

4

您可能最好阅读整行然后操作字符串:-

std::string line;
std::getline(inFile, line);
line = line.substr(19);  // Get character 20 onwards...

您可能也更好地寻找冒号:-

size_t pos = line.find(":");
if (pos != string::npos)
{
    line = line.substr(pos + 1);
}

或类似的东西

完成后,您可能希望将其反馈到字符串流中,以便您可以读取整数和其他内容?

int population;
std::istringstream ss(line);
ss >> population;

显然,这一切都取决于你想对数据做什么

于 2012-11-03T13:33:46.680 回答
3

假设你的数据是形式

 <Key>:<Value>

每行一个。然后我会这样做:

std::string line;
while(std::getline(inFile, line))
{
    std::stringstream  linestream(line);

    std::string key;
    int         value;

    if (std::getline(linestream, key, ':') >> value)
    {
        // Got a key/value pair
    }
}
于 2012-11-03T13:56:14.563 回答