题目说明单个单词查询不包含某一个单词的一部分,所以解决办法就是在主字符串和子字符串的首尾各添加一个空格字符。这样主串变为“ XXX sub subX…… sub ”;子串为“ sub ”。
#include<bits/stdc++.h> using namespace std; int main() { int count=0,pos=0; //计数、记位 string sm; //主串 string sub; //子串 string::iterator it;//迭代器 string::size_type p=0;//字符串类配套类型 getline(cin,sub); getline(cin,sm); for(it=sm.begin();it!=sm.end();it++)//大小写转换 { if(*it>=65&&*it<=90)*it=*it+32; } for(it=sub.begin();it!=sub.end();it++) { if(*it>=65&&*it<=90)*it=*it+32; } sm=" "+sm+" "; //改变所查询字符串 sub=" "+sub+" "; while((p=sm.find(sub,p))!=string::npos)//遍历主串查询子串 { p++;count++; } pos=sm.find(sub); if(sm.find(sub)==string::npos)printf("-1"); else printf("%d %d",count,pos); return 0; }