C++ 用istringstream的str方法解析文本
我想从文件example_file.txt解析以下文本C++ 用istringstream的str方法解析文本,c++,istream,C++,Istream,我想从文件example_file.txt解析以下文本 # Number of busStop 3 # Id Name Lat Lon 1 Cadorna 450781 76761 使用以下示例代码: int main() { int _numberBus; ifstream file; file.open("example_file.txt"); if (file.fail()) throw runtime_error(&qu
# Number of busStop
3
# Id Name Lat Lon
1 Cadorna 450781 76761
使用以下示例代码:
int main() {
int _numberBus;
ifstream file;
file.open("example_file.txt");
if (file.fail())
throw runtime_error("Something goes wrong");
string line;
getline(file, line); // Skip Comment Line
getline(file, line);
istringstream converter; //??
converter.str(line); //??
converter >> _numberBus; //??
}
我习惯了用C读取文件,但是现在C++中有点让人困惑。最后三行我不太懂。为什么我需要istringstream类中的所谓“converter”对象?我的教授说,如果我记得清楚的话,str会将行转换成字符串。如果在那之前它已经是一个字符串,为什么有必要呢?为什么我不能跳过最后三行,做“\u numberBus=(int)line”?我从最后一个问题开始回答 为什么我不能跳过最后三行,然后做
\u numberBus=(int)行
您不能这样做,因为std::string
是一个类,line
是一个不能以这种方式强制转换到int
的对象std::string
不是const char*
的某个typedef
为什么我需要从istringstream
类调用converter
对象
因为这是一个有用的抽象概念。它不是随机的流。它提取了一系列字符。在后台,流可以尝试将输入的字符序列解释为某种类型的值。在您的情况下,它是一个整数。请为stackoverflow.com的每个问题问一个问题。
istringstream
不仅仅是“更改字符串的名称”。你的C++教科书将解释<代码> RistIsFuns实现格式化的提取操作,行<代码> > <代码>。这是std::string
无法做到的。尝试在原始的std::string
上使用>
,看看效果如何。@J.C.VegaOstoi
和stringstream
都是解析文本的方法<例如,如果从同一个字符串中读取多个输入,则code>stringstream可以更直接。你可以想象一个stringstream
像一个简单的string
对象,它被包装在一个更高级的stream
接口中,支持更多有用的操作(比如>操作符)。不,str
不会将任何东西转换成任何东西。setter函数设置对象的某些字段。在这种特殊情况下,stringstream
类内部有字符串字段,str
函数允许设置该私有字段(或获取其值)@J.C.VegaO没有任何东西被str()
转换或重命名。您创建新的独立的,stringstream
,然后使用converter.str(line)
将line
加载到converter
的内部缓冲区中,如果您愿意的话。它不是一个奇特的字符串。这是一个不同的抽象概念。流在任何意义上都不等于字符串。流用于处理某些数据流,例如字符。字节。无论什么输入流应该有一个源,在您的例子中,这个源是一个字符串。