2016-10-22 11 views
1

文字列s1の各文字を文字列s2に一致する文字を削除しようとしています。他の文字列内の任意の文字に一致する文字列の文字を削除します。

私がコンパイルすると、何かエラーがあるとは言わないが何らかの理由で何も表示されない。誰かが私がここで間違ってやっていることを教えてもらえますか?

void squeeze(char s1[], char s2[]); 

int main() { 
    char s1[] = "abc"; 
    char s2[] = "cde"; 
    squeeze(s1, s2); 
    printf("%s\t%s", s1, s2); // nothing is being printed... 
} 

void squeeze(char s1[], char s2[]) 
{ 
    int i,j,k; 
    /* i is original s1 index 
    * j is s2 index 
    * k is new s1 index 
    */ 

    for (i = k = 0; s1[i] != '0'; i++){ 
     for (j = 0; s2[j] != '0'; j++){ 
      if (s1[i] == s2[j]) 
       s1[k++] = s1[i]; 
     } 
    } 

    s1[k] = '\0'; 
} 
+1

'!= '\ 0''はあなたが意図したものです。 '' 0 ''はヌルターミネータではなく数字のゼロです。 – user3386109

+1

私は ''0 ''の代わりに' '0 ''をループ内で使うつもりです。あなたのプログラムはおそらくクラッシュしています。 –

+0

トリックをしてくれてありがとうございました:) – ALKI

答えて

1

上記のコードは、条件のための第2項の「セグメンテーション障害(コアダンプ)」の代わりに「\ 0」の原因「0」の配置に誤差を与えます。それでも必要に応じて "ab"の代わりにs1の出力が "c"になるように修正されています。次のコードは、s1に必要な出力 "ab"を示しています。

#include <stdio.h> 

char * squeeze(char s1[], char s2[]); 
int isCharPresent(char c, char s[]); 

int main(int argc, char** argv) { 
    char s1[] = "abc"; 
    char s2[] = "cde"; 
    char * s = squeeze(s1, s2); 
    printf("%s\t%s\t%s", s, s1, s2); 
    return 0; 
} 

char * squeeze(char s1[], char s2[]) { 
    int i, k; 
    char *s = malloc(sizeof (s1)); 
    for (i = k = 0; s1[i] != '\0'; i++) { 
     if (isCharPresent(s1[i], s2) == 0) { 
      s[k++] = s1[i]; 
     } 
    } 
    return s; 
} 

int isCharPresent(char c, char s[]) { 
    int i; 
    for (i = 0; s[i] != '\0'; ++i) { 
     if (c == s[i]) { 
      return 1; 
     } 
    } 
    return 0; 
} 
関連する問題