如何编辑和使用包含双引号和转义字符的字符串?

时间:2011-08-23 00:57:40

标签: c string edit

如何编辑带双引号和反斜杠的字符串,如此

“我爱”编程\“”

并像这样打印

我喜欢“编程”

我在网上找到了这个,但没有运气:

for (int i = 0; i < lineLength; i++)
{
    if (line[i] == '\\')
    {
        line[j++] = line[i++];
        line[j++] = line[i];
        if (line[i] == '\0')
            break;
    }
    else if (line[i] != '"')
        line[j++] = line[i];
}
line[j] = '\0';

2 个答案:

答案 0 :(得分:1)

当您遇到反斜杠时,您当前正在复制反斜杠和下一个字符。你真正需要做的只是增加反斜杠然后复制下一个字符,就像它不是反斜杠或引号一样。而不是line[j++] = line[i++];(对于if正文中的第一行),您只需要i++;

还有其他一些你可以解决的问题,但是应该让它运转起来。

答案 1 :(得分:0)

恕我直言,当处理这些删除字符的问题时,读/写指针方法是最简单的方法之一,它使算法易于理解。

void RemoveQuotes(char * Str)
{
    const char * readPtr=Str;
    char * writePtr=Str;
    for( ;*readPtr; readPtr++, writePtr++)
    {
        /* Checks the current character */
        switch(*readPtr)
        {
            case '\"':
                /* if there's another character after this, skip the " */
                if(readPtr[1])
                    readPtr++;
                /* otherwise jump to the check and thus exit from the loop */
                else
                    continue;
                break;
            case '\\':
                /* if a " follows, move readPtr ahead, so to skip the \ and copy
                   the "; otherwise nothing special happens */
                if(readPtr[1]=='\"')
                    readPtr++;
                break;
        }
        /* copy the characters */
        *writePtr=*readPtr;
    }
    /* remember to NUL-terminate the string */
    *writePtr=0;
}