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

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

4

3 回答 3

2

C 中的一个字符只能是一个字符,因此您不能输入两个反斜杠。如果您解释您想要什么,我们可能会更好地帮助您。

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

tok1 = str;
tok2 = strstr(str, "\\\\");
*tok2 = '\0';
tok2 += 2;
于 2012-09-26T06:45:22.740 回答
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) */
    }
于 2012-09-26T07:48:36.907 回答
-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()到另一个字符串。

于 2012-09-26T07:16:55.673 回答