Я столкнулся с this question и получил еще один вопрос о предоставлении ответа (я не могу комментировать, так как я новичок в stackoverflow). Парень, который ответил на это, кажется правильным, заменив < < >> для cin
и cout
. Но проблема в том, что все полуколоны не появятся в новом выходном файле.Управление потоками строк ввода/вывода (правильные операторы Cin/cout <</>>)
Я знаю, что в то время как std::getline(input, command, ';')
стирает все точки с запятой, но Theyre должны быть возвращены с заявлением еще в конце, но не заменяется, когда я запускаю его. И если я пропущу ';' из 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
}
}
}
Функция 'std :: getline' не изменяет содержимое мусора. –
Пожалуйста, отредактируйте ваш вопрос с кодом, с которым у вас возникли проблемы. –
Извинения. Ред. – Deegeeek