11.找字符串的子串遍历字符串数组限定字符串的首个字符然后比较后面的是不是也和要找的子串一样#includestdio.h#includestring.hintmain(){chars[100];charkey[10];scanf(%s %s,s,key);intcount0;intslenstrlen(s);for(inti0;islen;i){if(s[i]key[0]){inttempii;/* 需要 tempi 来遍历比对同时保留 i 作为起始位置 以便匹配失败时外层循环能从 i1 继续尝试*///用次数判断intj0;intlen0;while(s[tempi]key[j]s[tempi]!\0key[j]!\0){len;tempi;j;}if(lenstrlen(key)){count;itempi-1;//例如saaaakeyaa写了是count2不写就是3}}}printf(%d,count);return0;}#includestdio.h#includestring.hintmain(){chars[100];charkey[10];scanf(%s %s,s,key);intcount0;intslenstrlen(s);for(inti0;islen;i){if(s[i]key[0]){inttempii;// 需要 tempi 来遍历比对同时保留 i 作为起始位置// 以便匹配失败时外层循环能从 i1 继续尝试intflag1;//一定要注意flag的位置//将key一一对照加一个标记不相同即为0intkeylenstrlen(key);for(intj0;jkeylen;j){if(slen-tempikeylen){break;}if(s[tempi]!key[j]){flag0;break;}tempi;}if(flag){count;itempi-1;}}}printf(%d,count);return0;}其实本来就有函数一个标准写法#includestdio.h#includestring.hintmain(){chars[100],key[10];scanf(%s %s,s,key);intcount0;char*ps;while((pstrstr(p,key))!NULL){//从p开始找这个字符串count;pstrlen(key);// 跳过已匹配部分不重叠// p; // 如果统计重叠子串用这个}printf(%d\n,count);return0;}2.字符串比较字符串比较不能用 这样的关系运算符数组会比较地址我们可以用strcmp(str1,str2)str1str2得到0,就得到0不一定是1或者-1#includestring.hcharstr1[]Hello;charstr2[]Hello;charstr3[]World;strcmp(str1,str2);// 返回 0相等strcmp(str1,str3);// 返回负数H Wstrcmp(str3,str1);// 返回正数W H注意数组名代表的是地址if(str1str2){// 这样不对比较的是地址不是内容永远为假printf(相等);}// 应该用 strcmpif(strcmp(str1,str2)0){printf(相等);}还有就是1区分大小写2别忘记头文件3.字符串连接strcat字符串1字符串2#includestring.hcharstr1[100]Hello;charstr2[] World;strcat(str1,str2);// str1变成 Hello World注意1.缓冲区溢出charstr[10]Hello;strcat(str, World!);// ❌ 缓冲区不够溢出2.初始化字符串以’\0’结尾charstr[100];strcat(str,Hello);// ❌ str没有\0结尾危险可以初始化为或者放’\0’charstr[100];// 初始化为空字符串strcat(str,Hello);3.头文件别忘了