是否可以从c ++中的文件中读取一行中的特定字符?

时间:2012-11-03 13:29:46

标签: c++ string fstream

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

人口规模: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数组

2 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:2)

假设您的数据格式为

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