2014-10-19 45 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

相关问题