检查字符串1中是否包含字符串2

编写程序,输入两个字符串string1和string2,检查在string1中是否包含有string2,
如果有,则输出string2在string1中的起始位置;如果没有,则显示“NO”;如果string2在
string1中多次出现,则输出在string1中出现的次数以及每次出现的起始位置,例如:
string1="the day the month the year";
string2="the"
输出结果应为:出现三次,起始位置分别是:0,8,18。

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int i,j,count = 0;
    string str,sub;
    getline(cin,str);
    getline(cin,sub);
    int len1 = str.size();
    int len2 = sub.size();
    for (i = 0; i < len1-len2+1; i++)
    {
        for (j = 0; j < len2; j++)
        {
            if (sub[j]!=str[i+j])
                break;
        }
        if (j==len2)
        {
            cout << i << " ";
            i += len2-1;
            count++;
        }
    }
    cout << endl << "出现" << count << "次";
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img


#include <stdio.h>
 
int Search(char *s1, char *s2) {
    char *temp = s1;
    int count = 0;
    while(*temp != '\0') {
        char *tmp1 = temp;
        char *t1 = s2;
 
        while(*t1 != '\0' && *tmp1 != '\0') {
            if(*t1 != *tmp1)
                break;
            //如果相等,且到最后,返回1
            if(*t1 == *tmp1 && *(t1+1) == '\0')
                return count;
            //若相等则继续比较下一个字符 
            if(*t1 == *tmp1) {
                t1++;
                tmp1++;
            }
        }
        temp++;
        count++;
    }
    return 0;
}
 
 
 
int main(int argc, char *argv[])
{
    //printf("Hello, world\n");
    char s1[50] = "";
    char s2[50] = "";
    printf("input s1:\n");
    gets(s1);
    printf("input s2:\n");
    gets(s2);
    printf("输出结果:%s 包含 %s,位置在:%d\n",s1,s2,Search(s1,s2));
    return 0;
}
#include <iostream>
#include <string>
#include <vector>

std::vector<std::size_t> search(const std::string &string1, const std::string &string2)
{
    std::vector<std::size_t> positions;
    for (std::size_t i = 0; i < string1.length(); i++)
    {
        const char *p = string1.c_str() + i;
        const char *q = string2.c_str();
        while (*p && *q && *p == *q)
        {
            p++;
            q++;
        }
        if (*q == '\0')
            positions.push_back(i);
    }
    return positions;
}

int main()
{
    std::string string1, string2;
    std::getline(std::cin, string1);
    std::getline(std::cin, string2);
    std::vector<std::size_t> positions = search(string1, string2);
    if (positions.empty())
    {
        std::cout << "NO\n";
    }
    else
    {
        std::cout << "出现" << positions.size() << "次,起始位置分别是: ";
        for (std::size_t i = 0; i < positions.size(); i++)
        {
            std::cout << positions[i];
            if (i < positions.size() - 1)
                std::cout << ',';
        }
        std::cout << '\n';
    }
}