【题目描述】
医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。如将ASPIRIN、aspirin整理成Aspirin。
【输入】
第一行一个数字n,表示有n个药品名要整理,n不超过100。
接下来n行,每行一个单词,长度不超过20,表示医生手书的药品名。药品名由字母、数字和-组成。
【输出】
n行,每行一个单词,对应输入的药品名的规范写法。
【输入样例】
4 AspiRin cisapride 2-PENICILLIN Cefradine-6【输出样例】
Aspirin Cisapride 2-penicillin Cefradine-6
【参考程序一】
方法:使用字符串数组
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,len=0;
cin>>n;
string a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
len=a[i].size();
if(a[i][0]>='a'&&a[i][0]<='z')
{
a[i][0]=a[i][0]-32;
}
for(int j=1;j<len;j++)
{
if(a[i][j]>='A'&&a[i][j]<='Z')
{
a[i][j]=a[i][j]+32;
}
}
cout<<a[i]<<endl;
}
return 0;
}
【参考程序二】
tolower和toupper的用法
作用:
C库函数 int tolower(int c)转换给定的字母为小写。
C库函数 int toupper(int c)转换给定的字母为大写。
头文件:在VC6.0可以是ctype.h或者stdlib.h,常用ctype.h
目前在头文件iostream中也可以使用,C++ 5.11已证明。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, len;
char s[25];
cin >> n;
for(int i = 0; i < n; ++i)
{
cin >> s;
len = strlen(s);
s[0] = toupper(s[0]);
for(int j = 1; j < len; ++j)
s[j] = tolower(s[j]);
cout << s << endl;
}
return 0;
}
【参考程序三】
getchar()函数
(1)用法
该函数声明在stdio.h头文件中,使用的时候要包含stdio.h头文件。如:
#include<stdio.h>
int getchar(void);
(2)语法:int getchar(void);
(3)返回值:getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。
也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。
(4)作用:从标准输入流只读取一个字符(包括空格、回车、tab),读到回车符('\n')时退出,键盘输入的字符都存到缓冲区内,
键入回车getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到'\n'。
要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符。
如果需要取消'\n'的影响,可以用getchar()来清除,如:while((c=getchar())!='\n'),这里getchar();只是取得了'\n'但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符。
ing namespace std;
char a[101][21];
int main()
{
int n,len=0;
cin>>n;
getchar();//读取回车占位
for(int i=0;i<n;i++)
{
cin.getline(a[i],21);
}
for(int i=0;i<n;i++)
{
len=strlen(a[i]);
if(a[i][0]>='a'&&a[i][0]<='z')
{
cout<<char(a[i][0]-32);
}
else
{
cout<<a[i][0];
}
for(int j=1;j<len;j++)
{
if(a[i][j]>='A'&&a[i][j]<='Z')
{
cout<<char(a[i][j]+32);
}
else
{
cout<<a[i][j];
}
}
cout<<endl;
}
return 0;
}