2014-10-19 3 views
0

strstr 함수를 사용하여 하위 문자열을 찾을 수 있습니다. 예를 들어 "Hello"하위 문자열을 찾을 수 있지만 "Hello"와 "Welcome"를 찾고 싶습니다. 그들 중 하나뿐 아니라 그 둘을 찾고 싶습니다. 나는 같은 단어 인 것처럼 "안녕하세요"와 "환영"에 대해 생각하고 싶습니다. 프로그램이 세상을 "hello"로 찾으면 false를 반환하고, 프로그램이 세상을 "welcome"로 찾을 수 있다면 false를 반환하지만 프로그램이 "hello"및 "welcome"이라는 단어를 찾을 수 있으면 true를 반환합니다. 내가 어떻게 할 수 있니?어떻게 두 개의 하위 문자열을 찾을 수 있습니까

int main(){ 

int total=0; 
char *p="Hello world welcome!"; 
    while (strstr(p,"Hello") != NULL) { 
     printf("%s", p); // to know the content of p 
     p++; 
     total++; 
    } 
printf("%i", total); 
getch(); // pause 
} 
+1

어떻게'않는 strstr를 넣고 있었어요 'while' 루프가 당신을 돕기로되어 있나? 첫 번째 시도에서 하위 문자열을 찾거나 그렇지 않을 것입니다. 더 이상의 조치가 필요하지 않습니다. – usr2564301

+0

@Jongware 동의합니다. while 루프 된'strstr'보다 더 특이한 점은 게시 된 응답에서도 올라가고있는 것처럼 보입니다. 나는 우리 모두가 우둔한 세상에있을 수 있다고 생각하지만, 나는 지금 당장 그것을 의심하고있다. – WhozCraig

+0

오른쪽. 즉, 루프는 검색 문자열이 시작을 벗어난 모든 * 문자 *에 대한 발생 횟수를 증가시킵니다. 예를 들어, '환영'의 경우 12를 반환합니다. – usr2564301

답변

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

char find_two(char* p, const char* first, const char* sec) { 
    char* t1 = strstr(p, first); 
    char* t2 = strstr(p, sec); 
    if (t1 != NULL && t2 != NULL) { 
     return 1; 
    } 
    else { 
     return 0; 
    } 
} 

int main(void) 
{ 
    char* p = "hello world welcome"; 
    printf("%d\n", find_two(p, "hello", "welcome")); 
    printf("%d\n", find_two("hello i am xx", "hello", "welcome")); 
    printf("%d\n", find_two("welcome i am xx", "hello", "welcome")); 
    printf("%d\n", find_two("testing abc", "hello", "welcome")); 

    return 0; 
} 

출력 :

1 
0 
0 
0 

편집 :

(@Jongware에 의해 제안) find_two의 일부 다른 구현 :

char find_two(char* p, const char* first, const char* sec) { 
    char *t1, *t2; 
    if ((t1 = strstr(p, first)) == NULL) { 
     return 0; 
    } 
    if ((t2 = strstr(p, sec)) == NULL) { 
     return 0; 
    } 
    return 1; 
} 
+0

+1. (아주 사소한) 최적화 :'first'가 발견되지 않으면 즉시'0'을 반환 할 수 있습니다. – usr2564301

+0

@Jongware 사실입니다. 나는 단지 간단한 해결책을 보여주고 싶었다. – macfij

0

문제 설명에 대해 약간 명확하지 않습니다. hte 두 부분 문자열 사이의 realseionhseip은 무엇입니까? 그들은 연결되어 있습니까? "안녕하세요. 환영"처럼요? 비록 당신의 코드가 당신이 occurences를 계산하기를 원한다고 결론 내릴지라도 이것은 당신의 질문에 명시 적으로 언급되어 있지 않습니다. 일반적으로 strstr 함수는 원하는만큼 자주 사용할 수 있습니다. 2가 두 줄로 계산됩니다. 왜하지 말아야합니까?

int total_hello=0; 
int total_welcome=0; 
char *p="Hello world welcome!"; 
char *p_1=p; 
char *p_2=p; 
while (strstr(p_1,"Hello") != NULL) { 
    printf("%s", p_1); // to know the content of p 
    p_1++; 
    total_hello++; 
} 
while (strstr(p_2,"welcome") != NULL) { 
    printf("%s", p_2); 
    p_2++; 
    total_welcome++; 
} 
return total_hello > 0 && total_welcome>0; 

hellos 및 welomces를 계산 하시겠습니까?

원래 "char * p"변수의 복사본을 만들어 strstr 함수에 매개 변수로 제공한다는 것에 유의하십시오.

+0

나는 같은 단어 인 것처럼 "안녕하세요"와 "환영"에 대해 생각하고 싶습니다. 프로그램이 세상을 "hello"로 찾으면 false를 반환하고, 프로그램이 세상을 "welcome"로 찾을 수 있다면 false를 반환하지만 프로그램이 "hello"및 "welcome"이라는 단어를 찾을 수 있으면 true를 반환합니다. 나는 – user3648443

+0

를 본다. 앞으로의 독자들에게 이해를 돕기 위해 질문을 다시 명료하게 지적하십시오. – Matthias

0
int main(){ 
    char *p="Hello world welcome!"; 
    printf("%i", strstr(p, "Hello") && strstr(p, "welcome")); 
    return 0; 
} 
+0

답장을 보내 주셔서 감사하지만 여전히 문제가 있습니다. 총 2를 반환하지만 1을 반환한다고합니다. 어떻게해야합니까? – user3648443

+0

@ user3648443 사용자가 지정하는 문자열을 계산할 수는 없습니다. 나는 다시 썼다. – BLUEPIXY

관련 문제