-1

给定字符串 ptr,我想要的输出是 hi\\n hey \\n 我正在运行 linux,这就是为什么我有两个斜杠,因为 linux 将 \n 视为 \\n

是不是在我的最终输出中以 \n 结尾(尽管它被解析为 \\n)我最终得到了 \\n(这意味着它被解析为 \\\n 我的代码:

char *ptr="hi\\r\\n hey \\r\\n";
for( i=0; ptr[i]!=0; i++ )
{
    while(ptr[i]=='\\' && ptr[i+1]=='r') /* copy all chars, including NULL at end, over char to left */
    {
        j=i;
        int count = 0;
        while(ptr[j]!='\0')
        {
            if(count==0)
            {
                ptr[j]=ptr[j+2];
                count++;
                j++;
            }
            else
            {
                ptr[j]=ptr[j+1];
                j++;
            }
        }
    }
}

我遇到的错误是,而不是结束 \n 我结束了 \n

4

1 回答 1

0

那是因为你的复制逻辑。在找到 \r 之后的 while 部分中,您将 j+2 复制到 j,然后将 j 增加 1。然后您将 j+1 复制到 j,因此基本上您将相同的字符复制两次。

试试这个改变的块

点[j]=点[j+1];改为ptr[j]=ptr[j+2];

while(ptr[j]!='\0')
        {
            if(count==0)
            {
                ptr[j]=ptr[j+2];
                count++;
                j++;
            }
            else
            {
                ptr[j]=ptr[j+2];
                j++;
            }
        }
    }

对于您的情况(忽略转义字符并使其变小) str = hi\r\n hey

当 j = 2 它进入 while 循环所以现在循环

while(ptr[j]!='\0')
            {
                if(count==0)` - true`
                {
                    ptr[j]=ptr[j+2]; ` ==> str is now = (hi\r\n hey) (replaced \ at 2 by \ at 4`
                    count++;  `==> count = 1`
                    j++;   ` == j = 3`
                }
                else                  ` ==skipped`
                {
                    ptr[j]=ptr[j+1];
                    j++;
                }
            }
        }
NEXT ITERATION

while(ptr[j]!='\0')
            {
                if(count==0) `- false`
                {
                    ptr[j]=ptr[j+2];
                    count++;  
                    j++;    
                }
                else        
                {
                    ptr[j]=ptr[j+1];  `==> str is now = (hi\\\n hey) (replaced r at 3 by \ at 4`
                    j++; `j==> 4`
                }
            }
        }

从而给你一个额外的'\'

于 2013-02-11T07:17:26.027 回答