2016-11-14 3 views
-2

이 문제를 해결하는 방법에 대한 정보를 얻으려면 문제가 있습니다.C로 하위 문자열 찾기

이 함수는 원본에서 toFind의 첫 번째 항목을 찾고 원본의 toFind 부분 문자열의 첫 번째 요소 인덱스를 나타내는 정수를 반환합니다. 예를 들어 toFind가 'man'이고 원본이 'superman'인 경우 함수는 'spiderman'의 'man'의 시작 부분이 7이기 때문에 함수는 6을 반환합니다. 함수가 부분 문자열을 찾지 못하면 -1을 반환해야합니다. 내가 지금까지 무엇을 가지고

는 :

{ 
    printf("%s\n%s\n", original, toFind); 
    int j, i, k, start, length; 
    i = 0; 
    j = 0; 
    k = 0; 
    length = (int)strlen(original); 
    start = 0; 

    printf("%d\n", length); 

    for (i = 0; i < strlen(toFind); ++i) 
    { 
     while (j != (length - 1)) 
     { 
     printf("j: %d\n", j); 
     if (toFind[i] == original[j]) 
     {    

      while (k != strlen(toFind)) 
      { 
       if (toFind[i + k] == original[j + k]) 
       { 
        printf("k: %d\n", k); 

        k = k + 1; 
        start = j; 
       } 
       else 
       { 
        k = 0; 

       } 
      } 
     } 
     else 
     { 
      ++j; 

     }   
     } 
    } 
    printf("%d\n", start); 
    if (k == strlen(toFind)) 
     { 
     printf("Word found\n"); 
     return start; 
     } 
     else 
     { 
     printf("Word not found\n"); 
     return -1; 
     } 

return 0; 
+0

* 특정 * 문제를 설명해야합니다. 당신이 가지고있는 것에 무엇이 잘못 되었습니까? 원하는대로 작동하지 않는 이유는 무엇입니까? – kaylum

+0

'strstr' 사용 ... – BLUEPIXY

답변

0

당신은 조건이 참인지 거짓인지 1 J의 값을 증가해야합니다. 귀하의 코드에서 조건이 true 일 때 j 값은 증가하지 않습니다. 그래서 거기에 붙어서 항상 그 상태에서 진정한 가치를 얻습니다. 나는 당신에게 그것을 분명히하지 않을 수도 있습니다. else{ ++j; }++j;으로 바꿉니다.

0

당신을 위해 일하지 않으려 고하지만 여기에 제가 생각해 낸 간단한 예가 있습니다. 그것은 테스트되지 않았습니다. 기본적으로 문자열 1을 반복하여 일치하는 문자를 찾은 다음 일치하지 않는 문자를 찾거나 문자가 부족할 때까지 두 문자열을 반복합니다.

const char* str1 = "Hello find me" , *str2 = "find"; 
int i = 0; 
while (str1[i]) { 
    while (str1[i] && str1[i] != str2[0]) { 
     ++i; 
    } 
    int j = 0; 
    while (str1[i + j] && str1[i + j] == str2[j]) { 
     ++j; 
    } 
    if (!str2[j]) {return i;} 
} 
return -1;