嘿所有,所以我必须从文本文件中获取值,但这些值不是独立的,它们都是这样编写的:
人口规模: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数组
答案 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
}
}