gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:34 49 4
gpt4 key购买 nike

函数原型(prototype)为:

string f (string s);

char* f (char* s);

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

它的行为如下例所示:

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

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

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

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

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

/C

最佳答案

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

要证明这是真的,请尝试以下操作:

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

你会观察到输出是 3。

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

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

关于c++ - 如何将带有转义字符的 C/C++ 字符串转换为普通(原始)字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996612/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com