2014-01-09 3 views
0

word의 모든 문자가 같은 순서로 표시되는지 확인하는 기능을 쓰려고합니다. 문자가 word에 여러 번 나타나는 경우 s에 적어도 여러 번 으로 표시되어야합니다. 예를 들어문자열 (C) - 두 문자열의 문자 비교

:

containsLetters2("abcdef", "aaabbb") 

0을 반환 문자 "A"문자 "B"의 세 가지 모습으로 다음의 더 세 가지 모습이 없기 때문에.

이 : 내 코드에서 무슨 잘못 이해할 수없는 일

containsLetters2("axaxxabxxbxbcdef","aaabbb") 

반환 :

int containsLetters2(char *s, char *word) 
{ 
    int j,i, flag; 
    long len_word, len_s; 

    len_s=strlen(s); 
    len_word=strlen(word); 

    for (i=0; i<=len_word; i++) { 
     flag=0; 
     for (j=0; j<=len_s; j++) { 
      if (*word==*s) { 
       flag=1; 
       word++; 
       break; 
      } 
      s++; 

     } 

     if (flag==0) { 
      break; 
     } 
    } 
    return flag; 
} 


int main() { 
    char string3[MAX_STRING] , string4[MAX_STRING]; 


    printf("Enter 2 strings for containsLetters2\n"); 
    scanf ("%s %s", string3, string4); 
    printf("Return value from containsLetters2 is: %d\n",containsLetters2(string3,string4)); 

    return 0; } 
+0

그것은 루프 같은에서해야한다, 그것은 도움이 있는지 확인하기 위해 다음과 같이 코드를 변경 -> 1) -> 내가 J user2760375

+0

참조 관련된, 그러나 명백한 질문을위한 [Pointers to String C] (http://stackoverflow.com/questions/21004727/pointers-to-string-c). –

+0

''aababbb '', 'aaabbb''어떻게 처리하겠습니까? 3 개의 a와 3 개의 b가 이어집니다. 중간 b가 경기를 방해합니까? –

답변

0

다음 코드는 컴파일되지 않을 수 있지만, 당신이 원하는 것을 할 것입니다 할 수 있으면 도움이되기를 바랍니다.

int containsLetters2(char *s, char *word) { 
    int lastIndex = 0; 
    for (int i = 0; i < strlen(word); i++) { 

     for (; lastIndex < strlen(s) && s[lastIndex] != word[i]; lastIndex++); 

     if (lastIndex == strlen(s)) { 
      return 0; 
     } 
    } 
    return 1; 
} 
2
for (i=0; i<=len_word; i++) { 
    flag=0; 
    for (j=0; j<=len_s; j++) { 
     if (*word==*s) { 

두 가지 명백한 문제가 있습니다. 하나는 하나의 오류에 의한 것입니다. 길이가 10이면 코드에서 0에서 10까지의 요소를 처리합니다. 즉, 11 개 요소가 아니라 10 개 요소를 처리합니다. 둘째로 *word*s과 비교합니다. 원하는 것은 과 s[j]입니다.

더 많은 문제가 분명하지 않습니다. 나는 당신이 한 걸음 뒤로 물러나서 당신의 코드가 따라야 할 알고리즘을 문서화하는 것으로부터 시작할 것을 강력하게 제안 할 것이다. 그러면 코드가 무엇을해야하는지 정확히 알 수 있으므로 코드를 디버그하는 것이 더 쉬워집니다.

0

당신은 변수 j, 예를 들어 의 값을 유지해야

word = "aaabbb" 
s = "axaxxabxxbxbcdef" 

제 1 회 반복, word[1] == s[1]는, 다음 휴식이 때, 제 2 회 반복에 와서, j가 영 (0)으로 재설정됩니다 , 및 word[2] == s[1].

이것은 잘못되었습니다.

i=j=0; 
for (; i<len_word; i++) { 
    flag=0; 
    for (; j<len_s; j++) { 
     if (*word==*s) { 
      flag=1; 
      word++; 
      break; 
     } 
     s++; 

    } 

    if (flag==0) { 
     break; 
    } 
}