我做了一个简单的程序,我正在阅读一个文本文件,它和程序在同一个文件夹中,文件只有一行:" v 1.0 2.0 3.0"
.
问题:
当我用字符串line
初始化一个stringstream
示例ss
时,我使用erase()
函数试图从字符串中删除字符'v'
,但它不起作用。MSVC控制台显示了同一行字符串:
如果删除.erase(0,1)
函数,输出是相同的。
这是怎么发生的?它应该删除字符v
。我通过OpenGL的对象加载器教程了解到这一点,他们可以删除它。
代码
#include <sstream>
#include <fstream>
#include <iostream>
int main()
{
std::ifstream filestream("textfile.txt", std::ios::in);
std::string line = "";
while (!filestream.eof())
{
std::getline(filestream, line);
std::cout <<"getline std::string "<< line.c_str()<<std::endl;
std::stringstream ss(line.erase(0,1));
std::cout << "stringstream: " << ss.str() << std::endl;
}
}
1条答案
按热度按时间rqqzpn5f1#
经过一些测试,我找到了原因。我犯了一个低级错误。我应该使用一个文本编辑器,可以显示所有隐藏的空格。
看起来自从stringstream ss的初始化以来,有一个空字符。如果我再删除一个字符,就可以了。
有没有可能是opengl书的作者打错了?他们用erase(0,1)表示顶点数据的“v”,然后用erase(0,2)表示面数据的“f
这就是不使用好的文本编辑器的错误