我徒劳地试图找到解析存储在string
对象中的文本文件的方法。字符串的格式如下:
...
1 45
1 46
1 47
2 43
2 44
2 45
...
我试图迭代整个字符串,抓住每一行,然后用第一个整数和第二个整数拆分字符串以进行进一步处理。但是,做这样的事情是行不通的:
string fileContents;
string::iterator index;
for(index = fileContents.begin(); index != fileContents.end(); ++index)
{
cout << (*index); // this works as expected
// grab a substring representing one line of the file
string temp = (*index); // error: trying to assign const char to const char*
}
我正试图找到一种方法来做到这一点,但到目前为止我还没有运气。
答案 0 :(得分:4)
使用istringstream
和std::getline()
获取每行的整数:
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::istringstream in("1 45\n1 47\n");
std::string line;
while (std::getline(in, line))
{
std::istringstream nums(line);
int i1, i2;
if (nums >> i1 && nums >> i2)
{
std::cout << i1 << ", " << i2 << "\n";
}
}
return 0;
}
请参阅http://ideone.com/mFmynj上的演示。
答案 1 :(得分:0)
std::string::iterator
标识char
。 char
可能用于形成一个元素std::string
,但这可能不是您想要的。相反,您可以使用两个迭代器来创建std::string
,例如:
for (std::string::const_iterator begin(s.begin()), it(begin), end(s.end());
end != (it = std::find(it, end, '\n'); begin = ++it) {
std::string line(begin, it);
// do something with the line
}
如前所述,使用从std::string
创建的流可能更容易使用流功能。