我怎样才能找到两个子串

时间:2014-10-19 11:29:22

标签: c substring strstr

我可以使用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
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您对问题描述有点不清楚。什么是两个子串之间的真实性?他们有联系吗?喜欢&#34;欢迎你好&#34;?即使您的代码让我们得出您想要计算出现的结论,但在您的问题中没有明确说明。通常,您可以根据需要随时使用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?

请注意,我已经创建了原始&#34; char * p&#34;的副本。变量并将其作为参数提供给strstr函数。

答案 2 :(得分:0)

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