C++编写程序,读入两个字符串。判断较短的字符串是否在较长的字符串中出现,如果有,给出出现的起始位置。

编写程序,读入两个字符串。判断较短的字符串是否在较长的字符串中出现,如果有,给出出现的起始位置。

参考:

代码:

#include <iostream>
using namespace std;

//查找big中出现smal的次数,pos数组记录出现的起始位置,因为可能出现多次,所以用数组
void findstr(char*big ,char* smal,int pos[],int *nmb)
{
    int i,j,lenb,lens;
    lenb = strlen(big);
    lens = strlen(smal);
    *nmb = 0;
    if(lens > lenb)
        return;

    i = 0;
    while(i < lenb-lens+1)
    {
        for (j = 0; j < lens;j++)
        {
            if(big[i+j] != smal[j]) //不区分大小写,如果区分大小写,则去掉tolower
                break;
        }
        if (j == lens) //说明找到
        {
            pos[*nmb] = i;
            (*nmb)++;
            i += lens;
        }else
            i++;
    }
}

int main()
{
    char big[30] ={0};
    char small[30] ={0};
    int i,pos[20],nmb = 0;
    cin >> big;
    cin >> small;
    findstr(big,small,pos,&nmb);
    if(nmb <=0)
        cout << "没有出现";
    else
    {
        cout << "出现位置:";
        for(i=0;i<nmb;i++)
            cout << pos[i] << " ";
    }
    cout << endl;
    return 0;
    
}