【问题标题】:How can I fix the problem with '\' character?如何解决“\”字符的问题?
【发布时间】:2021-02-19 12:57:02
【问题描述】:

在代码中,我将每个字符转换为 '(',如果它在整个字符串中只出现一次,或者如果它出现多次,则转换为 ')'。我通过了几乎所有的测试,除了输入“$$\”的测试。它给出“缺少终止字符”错误。我看到问题是'\'字符。如果我添加第二个'\'很好,但是有没有一种快速的方法来修复它,或者我应该以某种方式将指针的大小加1,然后添加第二个'\'?

附:输入是固定的。我无法改变它。

char text[] = "$$\";
char *res = malloc(strlen(text));
int counter = 0;
for(int i = 0; i < strlen(text); i++) {
    for(int j = 0; j < strlen(text); j++) {
        if( tolower(text[i]) == tolower(text[j]) )  {
            counter++;
        }
    }
    if(counter == 1) {
        res[i] = '(';
    } else {
        res[i] = ')';
    }
    printf("%c", res[i]);
    counter = 0;
}
return 0;

【问题讨论】:

  • 不,当你的意思是字符串中的一个反斜杠时,只使​​用“\\”。
  • 除非问题在于实现编译器和检测编译错误,或者系统损坏,否则在线判断系统会给出如此无效的C代码是没有意义的。看来我们想要网站的确切规格。
  • 我认为您的困惑是认为“\\”是两个字符。它是 C 中的一个反斜杠。strlen 将为 1。
  • "输入是固定的..." 不,输入是非法的 C

标签: c string char


【解决方案1】:

由于我们已经提出了三元组,您也可以使用幻数代替(x86 解决方案):

#include <stdio.h>
int main(void) 
{ 
  char* text = (char*)&(int) <%6038564%>;
  puts(text);
}

输出:

$$\

或者,如果您更喜欢 027022044 这个神奇的数字,那就选择那个吧。

(不是很认真的回答,但现在是星期五,所以...)

【讨论】:

    【解决方案2】:

    您可以使用trigraph sequence

    char text[] = "$$??/"; // { dollar-sign, dollar-sign, backslash, zero }
    

    【讨论】:

      【解决方案3】:

      没有任何东西可以从转义字符中逃脱,即使是转义符 性格……

      在 C 中,所有转义序列都由两个或多个字符组成

      第一个是反斜杠\,称为转义字符。

      剩余的字符决定了转义序列的解释。

      \\ 的转义序列等于5C ASCII 中的十六进制值,表示Backslash 的字符。因此,为了使用反斜杠,您必须使用它两次。

      【讨论】:

      • 是的,但是我不能修改输入,因为它是固定的并且由函数给出。
      • 你无法避免在C语言中转义,很抱歉这对你没有帮助但我的回答是正确的:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2012-09-15
      • 1970-01-01
      • 2019-03-23
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多