gpt4 book ai didi

在 C 中捕获转义字符

转载 作者:行者123 更新时间:2023-11-30 15:01:09 26 4
gpt4 key购买 nike

我的程序处理数组和转义字符。本质上它模拟了 tr Unix 命令。在大多数情况下,它是有效的,除了处理转义字符时。当使用tr命令时,它是这样的:

$ echo "abc" | tr "abc" "\nxy"

xy
$

但是,我目前解决程序上面同一示例的问题的方式返回:

\nx

我的程序没有发现这是一个转义字符并正常对待它。但我想不出解决这个问题的方法。任何建议将不胜感激。

size_t q;
int s,c;
unsigned char table[256];

for(s = 0; s < 256; s++)
{
table[s] = s;
}
for(q = 0; set1[q] !='\0'; q++)
{ // Ensure if there are excess characters in set1,
// they are replaced by the last character of set 2
if(q>=length(set2))
{
table[(int)set1[q]] = set2[length(set2)-1];
}
else if(set2[q] != set1[q])
{
table[(int)set1[q]] = set2[q];
}
}

while((c = getchar()) != EOF)
{
putchar(table[c]);
}

最佳答案

您正在使用的字符串与您提供给 tr 的字符串不同

这是分解为字符的第一个字符串:

“a”、“b”、“c”、“\0”

这是第二个字符字符串: '\'、'n'、'x'、'y'、'\0'

这是 tr 看到的字符串:

'\n'、'x'、'y'、'\0'

所以你的代码正在用给定的字符串做“正确的事情”。如果您给 tr 第二个字符串,您将得到与程序生成的结果相同的结果。为了做到这一点,你必须转义反斜杠(当然使用反斜杠),这样你的程序就相当于:

tr“abc”“\\nxy”

而不是:

tr“abc”“\nxy”

解决方案是在将第二个字符串传递给代码之前遵循转义序列。在单独的函数中执行此操作是一个好主意,因为它是一个有用的工具,并且如果您一次专注于一项任务,您的程序将会更干净。

您可以编写自己的函数来执行此操作,也可以查找其他人编写的函数来执行此操作。 (谷歌是你的 friend )

一旦您有了进行转换的代码,如果它没有按预期工作,请回来询问另一个问题。 [如果它确实按预期工作,你就赢了!]

回复:怎么写呢?迭代输入字符串,创建另一个字符串。

关于在 C 中捕获转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41623995/

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