某题库中,有这样一道题:
题目名称:药名整理
医生在书写药品名的时候无法关注到格式问题。不注意大小写,格式比较混乱等现象时有发生。
你能否写一个程序,将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果
是字母要大写,其他字母小写。如将ASPIRIN、aspirin整理成Aspirin。
最后,根据字母序升序进行排序。
输入:
第一行一个数字n,表示有n个药品名要整理,n不超过1000。
接下来n行,每行一个单词,长度不超过30,表示医生手书的药品名。药品名由字母、数字和横线(-)组成。
输出:
共n行,按照字母序升序排列的药品名称。
每行一个单词,对应输入的药品名的规范写法。
输入样例
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6
输出样例
2-penicillin
Aspirin
Cefradine-6
Cisapride
大家可能会发现,变换大小写相对简单,但如何升序排序呢?
接下来,我给大家讲解一下整个代码
1.在这里,我用了cstring头文件
#include<iostream>
#include<cstring>
using namespace std;
2.然后定义变量,输入n和n个字符串
int n,i,j;
cin >> n;
char a[n][31],t[31];
for (i=0;i<n;i++)
{
cin >> a[i];
}
3.根据ASCLL码变换大小写
常见字母的ASCLL码
- ‘A’—65,‘Z’—90
- ‘a’—97,‘z’—122
- ‘A’(65)和‘a’(97)差了32
for (i=0;i<n;i++)
{
j=0;
while (a[i][j]!='\0')
{
if (j!=0 && (int(a[i][j])>=65 && int(a[i][j])<=90))
{
a[i][j] = char(int(a[i][j])+32);
}
else if (j==0 && (int (a[i][j])>=97 && int(a[i][j])<=122))
{
a[i][j] = char(int(a[i][j])-32);
}
j++;
}
}
4.用cstring头文件的strcmp和strcpy进行升序排序
- strcmp 是用来比较两个C字符串(即char数组)的 。可以将strA的各个字母的ASCII码与strB的进行比较,如果strA>strB则返回整数,如果stA=strB返回0,否则返回负数
- strcpy作用是复制,strcpy(a,b)就是把b复制给a,在这里的3个strcpy()相当于把a[ j ]和a[ j+1 ]的值交换。
for (i=0;i<n;i++)
{
for (j=0;j<n-i-1;j++)
{
if (strcmp(a[j],a[j+1])>0)
{
strcpy(t,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],t);
}
}
}
5.输出 ,结束
for (i=0;i<n;i++)
{
cout << a[i] << endl;
}
return 0;
这样,我们就完成了这道题
敲黑板!!!
#include <cstring>//头文件
strcmp()//比较两个char数组
strcpy()//复制字符串
好了,今天我们就讲到这里 ,大家都学会了吗?