问题标题: 酷町堂:6499 咒语

0
0
已解决
倪雨泽
倪雨泽
高级光能
高级光能

<front color="#FFFFF"> 我不会~ 求大佬指点一二~</font>

倪雨泽在2024-04-21 23:30:47追加了内容

6499   咒语

经验值:1200

时间限制:1000毫秒

内存限制:128MB

题目描述 Description

古老的法师联盟创建了法术体系,这个体系中有符文,咒语和法术这三种技能。符文是一个字符串,必须由字母组成(包含大小写);咒语是一种特殊的符文,只有当符文中只包含一个大写字母且在首位时,该符文才是一个咒语;而法术,是若干个符文以空格隔开组成的字符串,并且最后一个字符是标点符号(. ? !)。
现给你M个法术,请问每个法术中有多少咒语。

输入描述 Input Description

第一行一个正整数M
第二行M个法术,法术之间以空格隔开,所有法术加在一起的总长度不超过1000

输出描述 Output Description

M行
每行一个整数表示咒语的个数

样例输入 Sample Input

1 Spavas li Mirno del Potro Juan Martine?

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

40%的数据:M=1;
100%的数据:1≤M≤5

#include<iostream>
#include<string>
using namespace std;
int m;
string s;
int st,ed;
int main(){
    cin>>m;
    getline(cin,s);
    while(m--){
        getline(cin,s);
        for(int i=0;i<s.length();i++){
            if(!(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')){
                s[i]=' ';
            }
        }
        int cnt=0;
        s=' '+s+' ';
        for(int i=0;i<s.size();i++){
            if(s[i]!=' '&&s[i-1]==' '){
                st=i;
            }
            if(s[i]!=' '&&s[i+1]==' '){
                ed=i;
                string tmp=s.substr(st,ed-st+1);
                if(tmp[0]>='A'&&tmp[0]<='Z'){
                    bool f=0;
                    for(int i=1;i<tmp.length();i++){
                        if(tmp[i]>='A'&&tmp[i]<='Z'){
                            f=1;
                            break;
                        }
                    }
                    if(f==0) cnt++;
                }
            }
        }
        cout<<cnt<<endl;
    }
    return 0;
}//WA 50

 

倪雨泽在2024-04-21 23:40:11追加了内容

<span style="display:block;text-align:right;color:orangered;">ctrl</span>

![](https://markdown.com.cn/images/i-am-svg.svg)

DING


0
我要回答