Конечно, замените char
на wchar_t
и std::string
на std::wstring
, если вы используете строки широких символов.
std::string input(/* ... */);
std::string output;
for(std::string::const_iterator it = input.begin(); it != input.end(); ++it)
{
char currentValue = *it;
switch (currentValue)
{
case L'\t':
output.append("\\t");
break;
case L'\\':
output.append("\\\\");
break;
//.... etc.
default:
output.push_back(currentValue);
}
}
Вы можете сделать это в C, но это будет сложнее, потому что вы заранее не знаете размер буфера (хотя вы можете угадать наихудший случай в 2 раза больше размера исходной строки). * 1008 Т.е. *
//Disclaimer; it's been a while since I've written pure C, so this may
//have a bug or two.
const char * input = // ...;
size_t inputLen = strlen(input);
char * output = malloc(inputLen * 2);
const char * inputPtr = input;
char * outputPtr = output;
do
{
char currentValue = *inputPtr;
switch (currentValue)
{
case L'\t':
*outputPtr++ = '\\';
*outputPtr = 't';
break;
case L'\\':
*outputPtr++ = '\\';
*outputPtr = '\\';
break;
//.... etc.
default:
*outputPtr = currentValue;
}
} while (++outputPtr, *inputPtr++);
(Не забудьте добавить обработку ошибок в версию C для таких вещей, как сбои malloc;))