问题标题: 酷町堂:1444 统计单词数

0
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
我要回答