2011-10-19 53 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でない限り、新しい文字列(char *配列)を作成してcharをコピーします。この場合、次のチャートに合致します。

+1

Aバリこれは、文字が削除する文字以外の場合は、文字列の各文字をそれ自身にコピーすることです。一時的な文字列を使用するよりも少ないコピー、ループ、およびメモリを使用します。 –

1

これは宿題の練習のように見えるので、私はちょうどあなたにヒントを与えるでしょう。削除する文字の隣に2つの文字列がある場合、文字列カウンタとループカウンタに何が起こるかを考えてください。

2

このインデックスで1つのchar(たとえば、index = 5)を削除すると、index = 6にあったcharに対応するようになりました。あなたのサイクルのインクリメントはインデックス= 6になるので、インデックス= 5で新しいcharをスキップします。
新しい文字列の有効な文字にコピーするほうが簡単です。
それとも、ここで

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