首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将带有转义字符的C/C++字符串转换为普通(原始)字符串

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

Stack Overflow用户
提问于 2010-01-04 06:35:52
回答 3查看 4.9K关注 0票数 1

函数原型将是:

代码语言:javascript
运行
复制
string f (string s);

代码语言:javascript
运行
复制
char* f (char* s);

F会将可打印ascii char表示的字符串转换为原始字符串。

它的行为如以下示例所示:

代码语言:javascript
运行
复制
f("AAA") = "AAA"
f("AA\n") = "AA+line_feed"

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

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

f("AA\nAA\tAA\07\n")会将所有这些转义字符转换成它们真正的等价物(每个转义序列1个字符)。

它必须至少存在于C编译器/C预处理器中。

/C

EN

回答 3

Stack Overflow用户

发布于 2010-01-04 07:09:51

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

要查看这是否正确,请尝试以下操作:

代码语言:javascript
运行
复制
printf( "%d\n", strlen( "AA\n" ) ) ;

您将看到输出为3。

现在,如果您在运行时有一个包含转义序列的字符串;例如,文字字符串"AA\n",它是四个字符,那么标准库没有理由仅仅因为编译器执行您所认为的那样的转换而提供此功能。编译器功能在运行时不可用。

自己实现这样的转换很简单,例如,您可以在遇到'\‘时简单地扫描字符串,然后使用下一个字符作为switch结构的控制变量,以选择要插入到输出字符串中的字符。如果遇到\x或\0,则需要读取后续的十六进制或八进制数字以确定要插入的字符。

票数 5
EN

Stack Overflow用户

发布于 2010-01-04 07:02:01

嗯,不是。没有C标准库或STL的入口点可以做到这一点。是的,在cpp的实现中有代码。找到它所需的时间是自己编写代码的20倍。

票数 1
EN

Stack Overflow用户

发布于 2010-01-04 07:51:21

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1996612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档