题解 | #统计字符串中子串出现的次数#

统计字符串中子串出现的次数

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也能实现,为什么会这样?

全部评论

相关推荐

野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务