I / O流字符串操作(正确的Cin / cout操作符&lt; <!---->&gt;)

时间:2016-11-04 03:15:14

标签: c++ string iostream fstream

我在这里遇到了this question并且对答案提出了进一步的问题(我无法评论,因为我是stackoverflow的新手)。回答它的人似乎是正确的替换&lt;&lt; &GT;&GT;适用于cincout。但我遇到的问题是所有的分号都不会出现在新的输出文件中。

我知道std::getline(input, command, ';') 会删除所有分号,但最后应该将else语句放回去,但是当我运行时它不会被替换掉它。如果我省略&#39 ;;&#39;在getline语句中,输出文件中的所有内容都会混乱。

如何让它显示分号确实显示?

void print(ifstream& input,ofstream& output)
{
    bool first = true;
    std::string command;
    while(std::getline(input, command, ';'))
    { // loop until no more input to read or input fails to be read
        if (command.find("cin")!= std::string::npos)
        { // found cin somewhere in command. This is too crude to work. See below
            size_t pos = command.find("<<"); // look for the first <<
            while (pos != std::string::npos)
            { // keep replacing and looking until end of string
                command.replace(pos, 2, ">>"); // replace with >>
                pos = command.find("<<", pos); // look for another 
            }
        }
        else if (command.find("cout")!= std::string::npos)
        { // same as above, but other way around
            size_t pos = command.find(">>"); 
            while (pos != std::string::npos)
            {
                command.replace(pos, 2, "<<");
                pos = command.find(">>", pos);
            }
        }
        if (! first)
        {
            output << command; // write string to output
        }
        else
        {
            first = false;
            output << ';' << command; // write string to output
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题在于:

        if (! first)
        {
            output << command; // write string to output
        }
        else
        {
            first = false;
            output << ';' << command; // write string to output
        }

在第一次迭代中,执行else分支并打印分号。

在以后的任何迭代中,执行if分支,打印分号。

修复很简单:交换以output <<开头的两行。