我在这里遇到了this question并且对答案提出了进一步的问题(我无法评论,因为我是stackoverflow的新手)。回答它的人似乎是正确的替换<< >>适用于cin
和cout
。但我遇到的问题是所有的分号都不会出现在新的输出文件中。
我知道而std::getline(input, command, ';')
会删除所有分号,但最后应该将else语句放回去,但是当我运行时它不会被替换掉它。如果我省略&#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
}
}
}
答案 0 :(得分:0)
问题在于:
if (! first)
{
output << command; // write string to output
}
else
{
first = false;
output << ';' << command; // write string to output
}
在第一次迭代中,执行else
分支并打印分号。
在以后的任何迭代中,执行if
分支,不打印分号。
修复很简单:交换以output <<
开头的两行。