2014-10-19 48 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 2014-10-19 11:46:22

+0

@Jongware我同意。唯一比周期性的'strstr'更加不尋常的是,它似乎也在張貼的答案中飼養起來。我想我們都可以在無知的土地上,但我現在很懷疑它。 – WhozCraig 2014-10-19 12:07:25

+0

對。實際上,循環增加了搜索字符串超出開始位置的每個*字符的出現次數。例如,對於'歡迎',它將返回12. – usr2564301 2014-10-19 12:10:04

回答

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 

編輯:

一些不同的實施find_two(由@Jongware的建議):

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。一個(很小的)優化:如果找不到第一個,你可以立即返回0。 – usr2564301 2014-10-19 12:11:50

+0

@Jongware true。我只是想展示一個簡單的決議。 – macfij 2014-10-19 12:13:40

0

你對問題描述有點不清楚。 hte兩個子串之間的實現是什麼?他們連接嗎?像「你好歡迎」?即使你的代碼讓人得出結論,你想要統計出現次數,但這並沒有在你的問題中明確說明。一般情況下,您可以根據需要經常使用strstr函數。兩個數兩個字符串 - 你爲什麼不應該這樣做:

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 2014-10-19 11:55:32

+0

我明白了。請重新說出您的問題,以便更明確地指出,以便於未來讀者的理解。 – Matthias 2014-10-19 11:58:20

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

感謝您的回答,但我仍然有問題。總回報2但我希望它返回1。我怎樣才能做到這一點 ? – user3648443 2014-10-19 12:02:10

+0

@ user3648443對您指定的字符串進行計數沒有意義。我重寫了。 – BLUEPIXY 2014-10-19 12:21:00

相關問題