如何在C中将两个反斜杠初始化为一个字符

时间:2012-09-26 06:42:41

标签: c

if (ch == '\\')
{
    escape_ch = '\\\\';
}

编译器对4个反斜杠不满意,但我需要能够将'\\'作为一个字符。 C读取'\\'作为一个反斜杠。所以我尝试'\\\\'作为两个反斜杠,它不起作用。我需要这个来实现我的程序。

3 个答案:

答案 0 :(得分:2)

C中的一个字符只能是一个字符,因此你不能放入两个反斜杠。如果你解释了你想要的东西,我们可以更好地帮助你。

您可以通过执行以下操作使用strstr进行标记:

tok1 = str;
tok2 = strstr(str, "\\\\");
*tok2 = '\0';
tok2 += 2;

答案 1 :(得分:0)

我认为你感到困惑,并没有真正遇到你认为有的问题。当你看到反斜杠时,检查'n'并用'\ n'替换它,对吗?也就是说,'\'+'n' - > '\ n'。好吧,只需对反斜杠做同样的事情,但用它自己替换它:'\'+'\' - > '\'。

c = getchar();
if (c == '\\') /* escape */
{
    c = getchar();
    switch( c ):
    {
        case 'n':
            c = '\n';
            break;
        case 't':
            c = '\t';
            break;
        case '\\':
            c = '\\'; /* not even necessary */
            break;
        ...
    }
}
/* store c in buffer */

通过省略不必要的赋值,您可以组合映射到自身的字符的处理:

    switch( c ):
    {
        case 'n':
            c = '\n';
            break;
        case 't':
            c = '\t';
            break;
        case '\\': case '"': case '\'':
            /* these escaped chars map to themselves so don't change c */
            break;
        /* ... handle other escapes such as \r, \<octal digits> too */
        case EOF:
            error("premature end of file in escape sequence"); /*write a function, error, that prints a message and a newline on stderr and calls exit(1) */
    }

答案 2 :(得分:-1)

这是没有strtok的解决方案:

    for(i=0, j=0, k=-1; i < strlen(str); i++){
        if(str[i] == '\\') j++;
        else j=0;
        if(j == 2){
            printf("%d %d\n", k + 1, i - 2);
            k = i;
        }
    }
    printf("%d %d\n", k + 1, i - 1);

它会给你索引,然后你就可以打印它或strncpy()到另一个字符串。