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