C++ 用istringstream的str方法解析文本

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

我想从文件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("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.VegaO
stoi
stringstream
都是解析文本的方法<例如,如果从同一个字符串中读取多个输入,则code>stringstream可以更直接。你可以想象一个
stringstream
像一个简单的
string
对象,它被包装在一个更高级的
stream
接口中,支持更多有用的操作(比如>操作符)。不,
str
不会将任何东西转换成任何东西。setter函数设置对象的某些字段。在这种特殊情况下,
stringstream
类内部有字符串字段,
str
函数允许设置该私有字段(或获取其值)@J.C.VegaO没有任何东西被
str()
转换或重命名。您创建新的独立的,
stringstream
,然后使用
converter.str(line)
line
加载到
converter
的内部缓冲区中,如果您愿意的话。它不是一个奇特的字符串。这是一个不同的抽象概念。流在任何意义上都不等于字符串。流用于处理某些数据流,例如字符。字节。无论什么输入流应该有一个源,在您的例子中,这个源是一个字符串。