2015-03-25 27 views
1

我想\n在一個字符串替換newline,我無法做到這一點我沒有得到期望的O/P此

#include<stdio.h> 
#define MAX 1000 
void escape(char x[],char y[]); 
main() 
{ 
int c=0,i; 
char s[MAX],t[MAX]; 
for(i=0; (c=getchar())!=EOF && i<MAX;i++) 
s[i]=c; 

s[i]='\0'; 
for(int k=0;k<i;k++) 
printf("%c",s[k]); 

escape(s,t); 
} 

void escape(char x[],char y[]) 
{ 
int j=0,m=0; 
while(x[j]!='\0') 
{ 
    if (x[j]=='\n') 
    { 
     y[m++] = '\\'; 
     y[m] = 'n'; 
    } 
    y[m]=x[j]; 
    j++; 
    m++; 
} 
y[m]='\0'; 
for(int k=0;y[k]!='\0';k++) 
printf("%c",y[k]); 
} 

的O/PI得到的是:

我名字是AMOL

^Z

我的名字是AMOL

我的名字是AMOL \

+1

你正在寫「\ n」,但隨後立即重寫以換行符n個。你需要跳過'y [m] = x [j];'在替換的情況下。 – VoidStar 2015-03-25 10:24:01

回答

1

您在escape()功能錯過了一個else,因此'n'被覆蓋

if (x[j]=='\n') 
{ 
    y[m++] = '\\'; 
    y[m] = 'n'; 
} 
else   // <<<--- added a line 
    y[m]=x[j]; 
+0

非常感謝 – 2015-03-25 10:34:57

4

在這裏它的自我,你可以簡單地添加

for(i=0; (c=getchar())!=EOF && i<MAX;i++){ 
     if(c=='\n'){ 
      s[i++]='\\'; 
      s[i]='n'; 
     } 
     else 
     s[i]=c; 
    } 

您的代碼添加你\ and n後,您需要從 開始(或)conitnue循環,你需要添加剩餘區塊在else部分

相關問題