0
已解决
万韧山
初级天翼
初级天翼
题目链接: 酷町堂:1444
#include<bits/stdc++.h>
using namespace std;
string bian(string s){
for(int i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='Z'){
s[i]+=32;
}
}
return s;
}
int main(){
string x,f;
getline(cin,x);
getline(cin,f);
string e=bian(x),k=bian(f);
int t,cnt=0,w,s;
for(int i=0;i<k.size();i++){
s=k.find(e,0);
if(t!=-1){
w=s;
break;
}
}
for(int i=0;i<k.size();i++){
t=k.find(e,0);
if(t!=-1){
cnt++;
t=0;
}
}
if(cnt==0) cout<<-1;
else cout<<cnt<<" "<<w;
return 0;
}
输出32 0
水贴者没qinren
0
已采纳
任欣怡
资深守护
资深守护
看题:
样例输入 Sample Input
输入样例#1: To
to be or not to be is a question
输入样例#2: to
Did the Ottoman Empire lose its power at that time
样例输出 Sample Output
输出样例#1: 2 0
输出样例#2: -1
为啥会这样捏?
看第25行昂
你的查找是从0开始的
但是上面已经从0开始了呀
为什么又要找一遍呢?
你这样写还有一个问题:
试一个栗子
iS
This is a book
你的输出不太对吧
所以我们用另外一个思路:
提取单词
(当然不用也行,直接cin输入字符串然后去遍历即可)
每个单词由空格隔开
那么可以在字符串的开头和结尾各加上一个空格
然后去遍历字符串
判断当前字符是不是这个单词的第一个字符,也就是前面有空格而且它不是空格
记录起始下标
判断当前字符是不是这个单词的最后一个字符,也就是后面有空格而且它不是空格
记录终止下标
截取这个单词(pos1,pos2-pos1+1)
判断是否与目标单词一致即可
这就是截取单词类题目的大概思路
很多题都可以这样做
改一下吧
加油你能行ヾ(◍°∇°◍)ノ゙
0
郭梓强
初级光能
初级光能
这道题要函数吗,你学过tolower函数和string::npos吗
郭梓强在2022-08-20 14:32:00追加了内容
如果不会的话私聊
0
李奕歌
初级天翼
初级天翼
核心:
循环(int i=0;i<=l-l2;i++){
循环(int j=0;j<l2;j++){
如果(toupper(s[i+j])!=toupper(ss[j]))break;
如果(i>0&&s[i-1]!=' ')break;
如果(j==l2-1&&(s[i+j+1]==' '||j+i==l)){
++t;
if(t==1)t1=i;
}
}
}
最后判断如果t==0就输出-1
否则输出t和t1
l2是第一个字符串的长度
l是第二个
ps:t,t1初值为0
toupper是小写转大写
0
万睿言
初级光能
初级光能
定义:string s,t;
int st,ed,cnt,pos;
cin输入字符串s,getline输入字符串t
循环遍历字符串s和t,将大写字母统一转换为小写字母
t=" "+t+" ";//首尾加空格
// 单词开头:一个字母,前面是一个空格
// 单词末尾:一个字母,后面是一个空格
for(int i=1;i<t.size()-1;i++){
if(t[i]!=' '&&t[i-1]==' '){//单词的开头
st=i;
}
if(t[i]!=' '&&t[i+1]==' '){//单词的结尾
ed=i;
string tmp=t.substr(st,ed-st+1);
if(s==tmp){
cnt++;
if(cnt==1)
pos=st;
}
}
}
如果cnt等于0输出-1,否则输出cnt和pos-1
0
0