捕获C中的转义字符

时间:2017-01-12 22:16:37

标签: c unix tr

我的程序处理数组和转义字符。基本上它模拟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]);
}

1 个答案:

答案 0 :(得分:1)

您使用的字符串与您提供给tr

的字符串不同

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

'a','b','c','\ 0'

这是你的第二个字符串:    '\','n','x','y','\ 0'

这是tr看到的字符串:

'\ n','x','y','\ 0'

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

tr“abc”“\\ nxy”

而不是:

tr“abc”“\ nxy”

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

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

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

RE:如何写呢?通过输入字符串迭代创建另一个字符串。