Я хочу знать, как я могу реализовать функцию в C++, которая берет строку, которая содержит экранированные управляющие символы, и unescape их (например, Hello\\nWorld\\n
- Hello\nWorld\n
).Как я могу реализовать «stripslashes»?
Есть ли способ реализовать такую функцию, не прибегая к отображению по каждому случаю из каждой двухсимвольной управляющей последовательности, которая начинается с косой черты с соответствующим символом управления символом?
Вот тест я хочу передать:
#include <string>
#include <iostream>
#include <stdio.h>
using std::string;
int main(int argc, char **argv)
{
// before transformation.
string given("Hello\\nWorld\\n");
// after transformation.
string expected("Hello\nWorld\n");
// transformation :: string -> string
auto transformation = [](const string &given) -> string {
// do something to strip slashes from given, and return it.
string result = given;
return result;
};
string result(transformation(given));
// test :: (string, string) -> bool
auto test = [](const string &result, const string &expected) -> bool {
// returns true if the two given strings are equal, false otherwise.
return (result.compare(expected) == 0);
};
puts(given.c_str());
puts(result.c_str());
std::cout << "test result: " << test(result, expected) << "\n";
return 0;
}
Непонятно, о чем вы просите. Эквивалентные последовательности возникают только в строковых/символьных литералах исходного кода C++. – PaulMcKenzie
Я спрашиваю, есть ли у меня строка с добавленными косыми чертами, как я могу «eval» их превратить экранированные управляющие литералы, такие как «\\ n» в «\ n». – Dmitry
Вы вводите в замешательство то, что вы видите в ваших литералах строки исходного кода, к чему-то, что вы можете получить в качестве входных данных во время выполнения. Посмотрите на свое описание («Hello \ nWorld \ n» на «Hello \ nWorld \ n»). См. Путаницу? Они одинаковы. Что касается «\\ n», если вы получите это как вход, это означает, что пользователь набрал одну косую черту, за которой следует «n», а ваш отладчик (или все, что вы просматриваете строку), возможно, показывает «\\ n ». – PaulMcKenzie