医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其它字母小写。如将ASPIRIN,aspirin整理成Aspirin。
输入描述
第一行一个数字n,表示有n个药品名要整理,n不超过100.
接下来n行,每行一个单词,长度不超过20,表示医生手书的药品名。药品名由字母,数字和-组成。
输出描述
n行,每行一个单词,对应输入的药品名的规范写法。
样例输入
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6
样例输出
Aspirin
Cisapride
2-penicillin
Cefradine-6
构建算法
1.遍历输入的每个药品名;
2.将每个药品名的第一个字母转换成大写,其余字母转换成小写;
3.根据调整后的药品名构建统一规范格式;
4.将统一规范格式的药品名输出。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
char names[n][20];
for(int i=0;i<n;i++)
{
scanf("%s",names[i]);
}
for(int i=0;i<n;i++)
{
int len=strlen(names[i]);
if(names[i][0]>=97&&names[i][0]<=122)
{
//将每一个药品名的第一个字母转换成大写,因此要使用names[i][0]去获取每一个药品名的第一个字母
names[i][0]-=32;
}
for(int j=1;j<len;j++)
{
if(names[i][j]>=65&&names[i][j]<=90)
{
names[i][j]+=32;
}
}
printf("%s\n",names[i]);
}
return 0;
}
用strlen函数来测量每个字符串的长度,这样就可以在接下来的代码中知道当前处理的字符串的长度,为了不出现索引越界的情况,所以需要这么一个变量来存储字符串的长度。
因为ASCII编码表中,字母a的数字编码为97,数字z的编码为122,所以需要使用这个范围来判断第一个字母是否为小写字母
使用ASCII码来比较,字母a的ASCII码为97,字母A的ASCII码为65,所以如果字母是a,要转换成A,则需要减去32,以改变为65(在ASCII码中,大写字母和对应的小写字母之间相差32个单位)