codechef T1 What's int the name

NITIKA: 姓名本无意
题目描述 Nitika 读了一本历史书,想要理清其中的人物关系。因此她要她的哥哥把书中出现的历史人 物全部列出来。哥哥把列好的人名给了 Nitika,但 Nitika 非常不满意,因为哥哥列出的这些人名 格式非常不规范。处于强迫症,Nitika 决定自己来整理这些人名。 一个名字最多有三个部分:姓、名,和中间名,按照名、中间名、姓的顺序排列;最少也有姓 这一个部分。Nitika 决定把人名写成下面的格式: • 只有每个部分的首字母是大写; • 除了姓之外,每个部分用其大写首字母加一个‘.’表示。 比如,按这个规则对一些名字进行改写: • gandhi −→ Gandhi • mahatma gandhI −→ M. Gandhi • Mohndas KaramChand gandhi −→ M. K. Gandhi 输入格式
输入的第一行包含一个整数 T,代表测试数据的组数。接下来是 T 组数据。 每组数据仅有一行,包含一个人名。名字的不同部分之间用空格隔开。
输出格式
对于每组数据,输出一行,包含改写后的人名。
数据范围和子任务 • 1 ≤ T ≤ 100 • 2 ≤名字每个部分的长度≤ 10 子任务 1(40 分): • 所有姓名仅有一个部分
子任务 2(60 分): • 无附加限制
样例数据
输入

3

gandhi

mahatma gandhI

Mohndas KaramChand gandhi

输出

Gandhi

M. Gandhi

M. K. Gandhi

归结起来这就是道简单的字符串题目 代码不过才四十行

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T,cnt1,cnt2,cnt3;
char s1[55],s2[55],s3[55];
bool pd(char c){return (c>='a'&&c<='z')||(c>='A'&&c<='Z');}
int read(char s[],int& cnt){
    char c=getchar();
    while(!pd(c)) c=getchar();
    while(pd(c)) s[cnt++]=c,c=getchar();
    if(c=='\n') return 0;
    return 1;
}
char pd1(char c){
    if(c>='a'&&c<='z') return c-'a'+'A';
    return c;
}
char pd2(char c){
    if(c>='A'&&c<='Z') return c-'A'+'a';
    return c;
}
void pf(char s[],int len){
    printf("%c",pd1(s[0]));
    for(int i=1;i<len;i++) printf("%c",pd2(s[i]));
    printf("\n");
}
int main()
{
    scanf("%d",&T);
    while(T--){
        cnt1=0; cnt2=0; cnt3=0;
        int f=read(s1,cnt1);
        if(!f) {pf(s1,cnt1); continue;}
        else printf("%c. ",pd1(s1[0]));
        f=read(s2,cnt2);
        if(!f) {pf(s2,cnt2); continue;}
        else printf("%c. ",pd1(s2[0]));
        read(s3,cnt3); pf(s3,cnt3);
    }
    return 0;
}
View Code

 

posted @ 2017-07-11 13:57  友人Aqwq  阅读(254)  评论(0编辑  收藏  举报