2011-10-19 231 views
1

我必須編寫一個函數C,它刪除字符串中與輸入字符相同的所有字符。 例如,用戶輸入字符串「aabbccaabbcc」和char'b',那麼結果應該是「aaccaacc」。 我不能在我的代碼找到的錯誤(功能不會刪除應該刪除所有字符):C刪除字符串中的字符

void removechar(char str[], char t) 
{ 
    int i,j; 
    for(i=0; i<strlen(str); i++) 
    { 
    if (str[i]==t) 
     for (j=i; j<strlen(str); j++) 
     { 
     str[j]=str[j+1]; 
     } 
    } 
} 

回答

1

以這種方式不能從字符串中刪除字符。 你想要做的是創建一個新的字符串(char *數組)和複製字符,除非該字符是T.在這種情況下繼續下一個字符。

+1

的可變交叉這是爲了將每個字符從字符串複製到自身,除非字符是要刪除的字符。與使用臨時字符串相比,使用更少的複製,循環和內存。 –

1

因爲這看起來像一個課外練習,我只給你一個提示。想想當你有兩個相鄰的角色要移除時,你的字符串和循環計數器會發生什麼。

2

當你刪除一個字符(比如index = 5)時,該索引現在對應的字符是index = 6;但你的循環增量索引= 6,所以你跳過索引= 5新的字符。
你最好複製到一個新的字符串有效的字符,這很容易。
或者你可以嘗試

void removechar(char str[], char t) 
{ 
    int i,j; 
    i = 0; 
    while(i<strlen(str)) 
    { 
     if (str[i]==t) 
     { 
      for (j=i; j<strlen(str); j++) 
       str[j]=str[j+1]; 
     } else i++; 
    } 
} 
1

這裏是我的功能

const char *removeCommaFromString(char *str){ 
int i,j; 
i = 0; 
while(i<strlen(str)) 
{ 
    if (str[i]==',') 
    { 
     for (j=i; j<strlen(str); j++) 
      str[j]=str[j+1]; 
    } 
    else i++; 
} 
return str; 

}

使用

char sam[]= {"Samir, Samedov"}; 
char * sss; 
sss = removeComma(sam); 

printf("\n%s",sam); 

輸出:Samir Samedov