-1

文字列 ptr を指定すると、必要な出力は hi\\n hey \\n Linux を実行しているので、Linux は \n を \\n として扱うため、2 つのスラッシュがあります。

私の最終出力で \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 にコピーするため、基本的に同じ文字を 2 回コピーします。

この変更されたブロックを試してください

ptr[j]=ptr[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 に答える