Хотя исходный код вашей программы содержит, строка, представленная литералом, не содержит никаких обратных косых черт, как продемонстрировано в следующем примере:
std::string command = "tzutil /s \"Romance Standard Time_dstoff\""; //Problem
std::cout << command;
// output:
tzutil /s "Romance Standard Time_dstoff"
Как таковое, нечего удалять из строки.
Обратная косая черта является escape-символом.\"
- escape-последовательность, представляющая один символ, двойную кавычку.Это способ ввести символ двойной кавычки в строковом литерале, при этом эта кавычка не интерпретируется как конец строки.
Чтобы записать обратную косую черту в строковый литерал, вы можете его избежатьс обратной косой чертой.Следующая строка содержит обратную косую черту: "tzutil /s \\"Romance Standard Time_dstoff\\""
.В этом случае удаление всех обратных косых черт может быть выполнено так:
command.erase(std::remove(command.begin(), command.end(), '\\'), command.end());
Однако простое удаление всех экземпляров символа может быть нецелесообразным.Если ваша строка содержит escape-последовательности, вам, вероятно, следует вместо этого удалить их.Это несколько сложнее.Вы не хотели бы удалять все обратные слэши, но вместо этого замените \"
на "
и \\
на \
и \n
на новую строку и т. Д.