c和c++如何判断一个字符串包含另一个字符串
1、不使用库函数
暴力算法 第一行输入要查找的字符串,第二行输入被查找的字符串 返回要查找字符串在另一个字符串中出现的首位置
#include<stdio.h> #include<string.h> int main() { int i,j,la,lb; int num = 0; char a[100],b[200],c; while ((c = getchar()) != ) { a[num++] = c; } a[num] = ;//末尾以 结束 num = 0; while ((c = getchar()) != ) { b[num++] = c; } b[num] = ;//末尾以 结束 la = strlen(a); lb = strlen(b); for (i = 0; i<=lb-la; i++) { if (b[i] == a[0]) { for (j = 0; j < la; j++) { if (b[i + j] != a[j])//不相等就退出,连续不能中断,否则重头开始判断 break; } if (j == la) { printf("%d ", i + 1);//输出在字符串中的位置 break; } } } return 0; }
运行结果:
2.使用c语言中的库函数
string.h strstr函数 函数名: strstr 功 能: 在串中查找指定字符串的第一次出现 用 法: char *strstr(char *str1, char *str2); 说明:返回指向第一次出现str2位置的指针,如果没找到则返回NULL。
调用函数,判断返回值是否等于NULL,决定是否输出 如; char *p=".c"; //需要的子串 if(strstr(A,p)) printf("%s",A);
3.使用c++中的find()函数
if(str.find(“chi1 huo3 guo1”) != string :: npos) 表示str字符串包含"chi1 huo3 guo1" if(str.find(“chi1 huo3 guo1”) == string :: npos) 表示str字符串不包含"chi1 huo3 guo1" npos 是一个常数,用来表示不存在的位置 查找字符串a是否包含子串b,不是用strA.find(strB) > 0 而是 strA.find(strB) != string::npos