【问题标题】:ifstream get line change output from char to stringifstream 获取从字符到字符串的行更改输出
【发布时间】:2012-11-13 09:33:54
【问题描述】:

C++ ifstream get line change getline output from char to string

我有一个文本文件.. 所以我读了它并做了类似的事情

char data[50];
readFile.open(filename.c_str());

while(readFile.good())
{
readFile.getline(data,50,',');

cout << data << endl;

}

我的问题是不是通过变量名数据创建大小为 50 的字符,我可以将 getline 转换为字符串而不是类似

string myData;
readFile.getline(myData,',');

我的文本文件是这样的

Line2D,[3,2] Line3D,[7,2,3]

我试过了,编译器说..

getline(std::string&,char)没有匹配函数

所以是否仍然可以通过分隔符来打破,将值分配给字符串而不是字符。

更新:

使用

while (std::getline(readFile, line))
{
    std::cout << line << std::endl;
}

它逐行读取,但我想将字符串分成几个分隔符,最初如果使用 char 我会将分隔符指定为第三个元素

readFile.getline(data,50,',');

如果我用分隔符逗号打破/explode,我该如何处理字符串,上面的那个。一行一行

【问题讨论】:

标签: c++ ifstream


【解决方案1】:

使用std::getline():

std::string line;
while (std::getline(readFile, line, ','))
{
    std::cout << line << std::endl;
}

始终立即检查读取操作的结果,否则代码将尝试处理读取失败的结果,就像发布的代码一样。

虽然可以在getline() 中指定不同的分隔符,但它可能会错误地将两个无效行视为一个有效行。建议完整检索每一行,然后拆分该行。分割线的有用工具是boost::split()

【讨论】:

  • @mhjd,很好的答案,但也许你也可以谈谈为什么 OP 代码 while(readFile.good()) 是错误的
  • @hmjd ,现在我一行一行地得到它,但是如果我想用分隔符打破它,值存储在字符串中,我该如何进行
  • @user1777711 我认为最好的方法是逐行获取。一旦你有了一行,你就必须编写 string parsing 代码来将它分解成你想要的分解方式。没有快速的方法可以做到这一点,您只需要编写代码即可。
猜你喜欢
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多