2014-10-21 4 views
1

키워드 단어의 위치를 ​​여러 번 반환 할 수있는 코드를 찾고 싶습니다. 예를 들어, 아래 프로그램은 첫 번째 Point의 발생 위치 인 배열 내부의 위치 인 9를 반환합니다. 그러나 전체 배열 내에서 모든 핵심어를 검색하려고합니다. 핵심 단어가 검색 할 배열에 여러 번 나타날 수 있기 때문입니다. 기본적으로 문자열에 따라 9, 17 등등을 반환 할 수 있기를 원합니다.복수 단어 검색

나는 어떤 종류의 루프를 넣을 생각을하고 있었지만 확실히 알 수있는 strstr 명령에 대해서는 경험이 없습니다. 않는 strstr은 검색 문자열이 널 포인터를하지 않는 한 당신이 한, 당신 않는 strstr 새로운 시작점으로 반환 값을 사용할 수의를 선두로 포인터를 반환으로

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char haystack[30] = "TutorialsPointandPoint"; 
    char needle[10] = "Point"; 
    char *ret; 

    ret = strstr(haystack, needle); 
    printf("The substring is: %d\n", ret-haystack); 

    return(0); 
} 

답변

0

.

더 많은 이하 :

ret = strstr(haystack, needle); 
while(ret!=NULL) 
{ 
printf("The substring is: %t\n", ret-haystack); 
ret++; 
ret = strstr(ret , needle); 
} 
+0

+1하지만'null'는 보통'를 size_t에 대한 '%의 d'를 사용하는 방법에 대한 불평 (바르게 그래서)'NULL', 일부 컴파일러를 철자 '포인터 빼기. – usr2564301

+0

네가 맞다면, printf에 % zp를 사용하는 것이 더 나은 해결책이 될 것이다. –

+1

사실, 두 포인터의 차이로 인해 생성되는 타입은 서명 된 타입 인'ptrdiff_t' ('size_t'와 같은 unsigned 타입보다는)이고 올바른 포맷 길이 한정자는't'입니다. –

0

토비아스는 바른 길에,하지만 당신은 무한 루프에 박히 있도록 strstr은 문자열의 시작 부분에 바늘을 일치 기억 해요.

int main() { 
    char haystack[] = "TutorialsPointandPoint"; 
    char needle[] = "Point"; 

    char *search = haystack; 

    while(search != NULL) 
    { 
     search = strstr(search, needle); 

     if(search) 
     { 
      search++; 
      printf("The substring is: %zu\n", search - haystack); 
     } 
    } 

    return 0; 
} 
0

이 시도 ...

int a=0; 
    ret = strstr(haystack+a,needle); 
    printf("The substring is: %d\n", (a=ret-haystack)); 
    while(strlen(haystack+a+strlen(needle))>strlen(needle)) 
    { 
     ret = strstr(haystack+a+strlen(needle),needle); 
     printf("The substring is: %d\n", (a=ret-haystack)); 
    }