下面是代码,思路是遍历同时向后出发逐字比较,没调什么函数
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
char lower(char &c){
if('A'<=c && c<='Z') c+=32;
return c;
}
int main()
{
string tar, s;
int num=0, ad;
getline(cin,tar);
getline(cin,s);
if (tar.size()==1){
char ch=lower(tar[0]);
for (int i=0; i<s.size(); i++){
if (ch==lower(s[i])) num++;
if (num==1) ad=i;
}
if (num==0) printf("-1\n");
else printf("%d %d\n",num,ad);
return 0;
}
for (int i=0; i<tar.size(); i++)
{
tar[i]=lower(tar[i]);
}
for (int idx=0; idx<s.size(); idx++)
{
if (s[idx]!=' ')
{
int idx_s=idx, idx_t=0, match=0;
while (lower(s[idx_s])==tar[idx_t])
{
match++;
idx_s++, idx_t++;
}
if (match==tar.size())
{
num++;
if (num==1) ad=idx;
}
}
}
if (num==0) printf("-1\n");
else printf("%d %d\n",num,ad);
return 0;
}
这是下载的错误输入输出:
error in:
u
tIXHUguyz PZYAJL BIv NAPoemaJ aTF LOvhV m s LSa n xDn mQnO T ettIq T AL fG B Xme t fct U tQ d
error out:
1 92
这是我本地用error in跑出的结果,人工检验下来是对的:
3 5
这个问题困扰了蒟蒻很久,希望路过大佬能指点一二ww