题解 | #统计字符串中子串出现的次数#
统计字符串中子串出现的次数
https://www.nowcoder.com/practice/9eb684f845a446f3b121472de2ea75cd
两种实现方式的思路都是循环找到第一个字符出现的位置,接着在第一个字符出现的下一个位置进行查找 1、用c语言的strstr函数实现查找子串 #include <iostream> #include <cstring> using namespace std; int main() { char str[100] = { 0 }; char substr[100] = { 0 }; cin.getline(str, sizeof(str)); cin.getline(substr, sizeof(substr)); int count = 0; // write your code here...... char * p = str; while((p = strstr(p, substr))){ count++; p++; } cout << count << endl; return 0; } 2、用c++的find函数实现查找子串 #include <climits> #include <iostream> #include <cstring> using namespace std; int main() { char str[100] = { 0 }; char substr[100] = { 0 }; cin.getline(str, sizeof(str)); cin.getline(substr, sizeof(substr)); int count = 0; // write your code here...... string s1(str); string s2(substr); int i = 0; while((i = s1.find(s2, i))!=s1.npos){ count++; i++; } cout << count << endl; return 0; } 这里字符串的find函数查找成功的返回值是查找到第一个字符的下标,查找失败的返回值是无穷大即s1.npos 但是我用-1代替s1.npos也能实现,为什么会这样?