Мне нужна функция, которая даст мне экранированный специальный символ из символа буквы. Это применимо только тогда, когда это имеет смысл: 't', 'n', 'r', 'b', 'f', 'v'.Как преобразовать символ буквы в соответствующий экранированный специальный символ
Прямо сейчас, вот моя реализация:
typedef struct SpecialCharacter
{
SpecialCharacter(char letter, char special)
{
m_letter = letter;
m_special = special;
}
char m_letter;
char m_special;
} SpecialCharacter;
typedef std::vector<SpecialCharacter> SpecialCharacters;
static const SpecialCharacters& GetSpecialCharacters()
{
static SpecialCharacters characters;
if (characters.empty())
{
characters.push_back(SpecialCharacter('b', '\b'));
characters.push_back(SpecialCharacter('f', '\f'));
characters.push_back(SpecialCharacter('n', '\n'));
characters.push_back(SpecialCharacter('r', '\r'));
characters.push_back(SpecialCharacter('t', '\t'));
characters.push_back(SpecialCharacter('v', '\v'));
}
return characters;
}
static bool getEscaped(char letter, char& escaped)
{
for (SpecialCharacters::const_iterator iter = GetSpecialCharacters().begin();
iter != GetSpecialCharacters().end();
++iter)
{
if (letter == iter->m_letter)
{
escaped = iter->m_special;
return true;
}
}
return false;
}
мне не нравится, как я добавляю элементы вектора символов:
characters.push_back(SpecialCharacter('b', '\b'));
Будет ли способ сделать :
characters.push_back(SpecialCharacter('b'));
, а затем что-то вроде:
SpecialCharacter(char letter)
{
m_letter = letter;
m_special = '\' + letter; // does not work, of course!
}
Я хотел бы способ объединить «\» и «п» в «\ п», или получить «\ п» от «п» любым другим способом ...
Edit: случай что я был изначально, прежде чем я переместил код в вектор struct (потому что мне нужна функция, чтобы обойти вокруг). Так что это не будет хорошим решением моей проблемы. Я хотел бы преобразовать «n» в «\ n» без какой-либо «таблицы поиска»
просто любопытно, в чем же цель? – sanjayk79
Необходимо вручную обрабатывать, защищать и преобразовывать эти символы для экспорта скриптов, которые будут использоваться внешним парсером. В одном случае пользователь вводит текст «bbb \ n» в графическом интерфейсе, и мне нужно заменить «bbb \ n» на «bbb \\ n», чтобы «\ n» отображался в экспортированном файле, а не в реальной карете вернуть. Но есть и другие условия, когда мне нужно отображать 'n' в '\ n' или в моем коде. – jpo38
вы можете создать простой escaped_char [128] (для печатаемых символов), например. escaped_char ['f'] = '\ f' и escaped_char ['a'] = 'a'. Даже посмотрев на экранированную фигуру, я не знаю, как это поможет. Посмотрите на http://stackoverflow.com/questions/2417588/escaping-a-c-string – sanjayk79