2016-10-22 2 views
1

문자열 s1의 각 문자를 문자열 s2의 모든 문자와 일치하는 squeeze 함수를 생성하려고합니다.다른 문자열의 문자와 일치하는 문자열의 문자 삭제

내가 컴파일 할 때 어떤 오류가 있다고 말할 수는 없지만 어떤 이유로 인쇄되지 않습니다. 누군가 내가 여기서 잘못하고있는 것을 말해 줄 수 있습니까?

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 ''은 숫자 0이며, 널 종결자가 아닙니다. – user3386109

+1

나는 ''0 ''대신에 루프에서 ''\ 0 ''을 사용하려고한다. 프로그램이 충돌하는 것 같습니다. –

+0

트릭을 해 주셔서 감사합니다 :) – ALKI

답변

1

상기 코드 때문에 '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; 
} 
관련 문제