如何将带有转义字符的C / C ++字符串转换为普通(原始)字符串

时间:2010-01-03 22:35:52

标签: c++ c escaping character

函数原型将是:

string f (string s);

char* f (char* s);

f会将由printable ascii char表示的字符串转换为原始字符串。

,它的行为与以下示例相同:

f("AAA") = "AAA"
f("AA\n") = "AA+line_feed"

即输入字符串为4 char long(+ NULL),输出为3 char long(+ NULL)。 2个可打印字符'\''n'(输入字符串的最后2个字符)被一个LF字符替换(ascii 10)

f("\0x007")返回一个长度为1的字符串,其中包含char ascii 7

f("AA\nAA\tAA\07\n")会将所有这些转义字符转换为真实的(每个转义符1个字符)等效。

这必须存在,因为至少C编译器/ C预处理器会这样做。

/ C

3 个答案:

答案 0 :(得分:4)

我认为你完全误解了逃逸序列是如何工作的。例如,“AA \ n”是 4 char long(+ NULL)”如你所说,它实际上正是你想要的 - 一个三字符串。编译器为您提供转换,它不会在运行时发生。

要确定这是真的,请尝试以下方法:

printf( "%d\n", strlen( "AA\n" ) ) ;

你会发现输出是3。

现在,如果你在运行时有一个包含转义序列的字符串;例如,文字字符串“AA \ n”,其中四个字符,那么标准库没有理由提供此功能只是因为编译器执行您认为想要的翻译。编译器功能在运行时不可用。

自己实现这样的翻译是微不足道的,例如,您可能只是在遇到'\'时扫描字符串,您将使用下一个字符作为switch构造的控制变量来选择要插入到输出字符串中的字符。如果遇到\ x或\ 0,则需要读取后续的十六进制或八进制数字以确定要插入的字符。

答案 1 :(得分:1)

嗯,不。没有C标准库或STL的入口点就是这样做。是的,cpp的实现中有代码。您需要花费20倍的时间来自己编写代码。

答案 2 :(得分:0)

这称为“取消引用”或“取消引用”。 C编译器通常会在输入文本扫描过程中执行此操作,因此您不太可能在任何C编译器源中找到此类函数。最好的办法是编写一个简单的函数来扫描字符串,在转义时替换转义符,将字符存储在输出字符串中。