0
已解决
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char a[501],b[101];
int len,len2,ans=0,m=0,y=0,k=-1;
gets(a);
gets(b);
len=strlen(a);
len2=strlen(b);
for(int i=0;i<=len-1;i++)
{
if(a[i]>='A'&&a[i]<='Z') a[i]+=32;
}
for(int i=0;i<=len2-1;i++)
{
if(b[i]>='A'&&b[i]<='Z') b[i]+=32;
}
for(int i=0;i<=len-1;i++)
{
if(a[i]==' ') y++;
if(a[i]!=b[m])
m=0;
else if(a[i]==b[m])
{
m++;
}
if(m==len2)
{
if(k==-1) k=y+1;
m=0;
ans++;
}
}
if(ans==0) cout<<"-1"<<endl;
else cout<<k<<' '<<ans<<endl;
}
只有四十
0
已采纳
我的代码,只有80分。仅供参考
string str[101010];
string str1;
char s;
int i,ans,first;
int main(){
while(s != '\n'){
i ++;
cin >> str[i];
for(int j = 0;j <= str[i].size() - 1;j ++){
if(str[i][j] >= 'A' && str[i][j] <= 'Z'){
str[i][j] += 32;
}
}
s = getchar();
}
cin >> str1;
for(int j = 0;j <= str1.size() - 1;j ++){
if(str1[j] >= 'A' && str1[j] <= 'Z') str1[j] += 32;
}
for(int j = 1;j <= i;j ++){
if(str1 == str[j]){
if(first != 0){
ans ++;
}
else{
first = j;
ans ++;
}
}
}
if(first == 0) cout << -1 << endl;
else cout << first << " " << ans << endl;
0
for(int i=0;i<=len-1;i++)
{
if(a[i]==' ') y++;
if(a[i]!=b[m])
m=0;
else if(a[i]==b[m])
{
m++;
}
if(m==len2)
{
if(k==-1) k=y+1;
m=0;
ans++;
}
}
你这个for循环的逻辑不对
最主要的点是你没有考虑如果b是a中的部分单词的话怎么办,题目中的意思是这种情况下不是一个单词,所以不算,你的代码里这种情况是算找到了的。举个例子,如果字符串a中的某个单词是 abbde ,字符串b是abbd,这种情况不算找到了。
0
0
0
0
string lwr(string s)
{
int l=s.size();
for(int i=0;i<l;i++)
{
if(s[i]>='A'&&s[i]<='Z') s[i]+=32;
}
return s;
}陶梓锐在2018-01-13 15:02:32追加了内容
a=lwr(a);
s=lwr(s);
s+=' ';
while(true)
{
n=s.substr(0,s.find(" ",0));
if(n==a)
{
flag=true;
i++;
}
if(!flag)x++;
s=s.erase(0,s.find(" ",0)+1);
if(s.empty())
{
if(i==0)
{
cout<<-1;
return 0;
}
break;
}
}
核心代码,仅供参考
