Как мне отредактировать и использовать строку, содержащую двойные кавычки и escape-символы? - PullRequest
0 голосов
/ 23 августа 2011

Как мне отредактировать строку с двойными кавычками и обратной косой чертой, как эта

"я люблю \" программирование \ ""

и напечатать так:

я люблю"программирование"

Я нашел это онлайн, но не повезло:

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 ]

1 голос
/ 09 сентября 2011

Когда вы сталкиваетесь с обратной косой чертой, вы в настоящее время копируете обратную косую черту И следующий символ. Что вам действительно нужно сделать, это просто увеличить обратную косую черту, а затем скопировать следующий символ, как если бы это не было обратной косой чертой или кавычкой. Вместо line[j++] = line[i++]; (для первой строки в вашем if теле) вам просто нужно i++;.

Есть и другие вещи, которые вы могли бы исправить, но это должно помочь.

0 голосов
/ 09 сентября 2011

ИМХО подход указателя чтения / записи является одним из самых простых при решении этих проблем удаления символов, он упрощает алгоритм.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...