这些线程无法回答我:

resetting a stringstream

How do you clear a stringstream variable?

        std::ifstream file( szFIleName_p );
        if( !file ) return false;

        // create a string stream for parsing

        std::stringstream szBuffer;

        std::string szLine;     // current line
        std::string szKeyWord;  // first word on the line identifying what data it contains

while( !file.eof()){

            // read line by line

            std::getline(file, szLine);

            // ignore empty lines

            if(szLine == "") continue;

            szBuffer.str("");
            szBuffer.str(szLine);
            szBuffer>>szKeyWord;
szKeyword将始终包含第一个单词,szBuffer未被重置,在任何地方都找不到关于如何使用stringstream的清晰示例。

答案后的新代码:
...
            szBuffer.str(szLine);
            szBuffer.clear();
            szBuffer>>szKeyWord;
...

好的,那就是我的最终版本:
        std::string szLine;     // current line
        std::string szKeyWord;  // first word on the line identifying what data it contains

        // read line by line

        while( std::getline(file, szLine) ){

            // ignore empty lines

            if(szLine == "") continue;

            // create a string stream for parsing

            std::istringstream szBuffer(szLine);
            szBuffer>>szKeyWord;

最佳答案

调用clear()后,您没有对流进行str("")。再看看this answer,它也解释了为什么应该使用str(std::string())进行重置。而且,根据您的情况,也可以仅使用str(szLine)重置内容。

如果不调用clear(),则不会重置流的标志(如eof),从而导致令人惊讶的行为;)

关于c++ - 如何重用stringstream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12112259/

10-10 06:56