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==' ') 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(" "); } 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; }