第一部分 C++语言
第五章 数组 第二节 二维数组
第三节 字符类型和字符数组
本想昨天更博,但被突如其来的摊牌扫了兴致,总算解决了一个麻烦事。
密码翻译
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 19243 通过数: 8506
【题目描述】
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。
【输入】
输入一行,包含一个字符串,长度小于80个字符。
【输出】
输出每行字符串的加密字符串。
【输入样例】
Hello! How are you!
【输出样例】
Ifmmp! Ipx bsf zpv!
【我的代码】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a[80],b[80];
gets(a);
for(int i=0;a[i]!='\0';i++)
{
if((a[i]>=97&&a[i]<=121)||(a[i]>=65&&a[i]<=89))b[i]=a[i]+1;
else
{
if(a[i]==122||a[i]==90)b[i]=a[i]-25;
else b[i]=a[i];
}
}
for(int i=0;a[i]!='\0';i++)
cout<<b[i];
return 0;
}
注:ASCII码不能弄错
加密的病历单
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 14033 通过数: 7236
【题目描述】
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1.原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2.逆序存储(abcd -> dcba )
3.大小写反转(abXY -> ABxy)
【输入】
一个加密的字符串。(长度小于50且只包含大小写字母)
【输出】
输出解密后的字符串。
【输入样例】
GSOOWFASOq
【输出样例】
Trvdizrrvj
【我的代码】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a[50],b[50];
gets(a);
for(int i=0;i<strlen(a);i++)
{ if(a[i]=='z')b[i]='c';
else if(a[i]=='y')b[i]='b';
else if(a[i]=='x')b[i]='a';
else if(a[i]=='Z')b[i]='C';
else if(a[i]=='Y')b[i]='B';
else if(a[i]=='X')b[i]='A';
else b[i]=a[i]+3;
}
for(int i=0;i<strlen(a);i++)
{
if(b[i]>=97&&b[i]<=122)b[i]-=32;
else b[i]+=32;
}
for(int i=strlen(a)-1;i>=0;i--)
cout<<b[i];
return 0;
}
注:字母大小写区分不可忘!
整理药名
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 13977 通过数: 6826
【题目描述】
医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。如将ASPIRIN、aspirin整理成Aspirin。
【输入】
第一行一个数字n,表示有n个药品名要整理,n不超过100。
接下来n行,每行一个单词,长度不超过20,表示医生手书的药品名。药品名由字母、数字和-组成。
【输出】
n行,每行一个单词,对应输入的药品名的规范写法。
【输入样例】
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6
【输出样例】
Aspirin
Cisapride
2-penicillin
Cefradine-6
【我的代码】
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
char a[100][20];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
if(a[i][0]>=97&&a[i][0]<=122)a[i][0]-=32;
for(int j=1;j<strlen(a[i]);j++)
if(a[i][j]>=65&&a[i][j]<=90)a[i][j]+=32;
}
for(int i=0;i<n;i++)
cout<<a[i]<<endl;
return 0;
}
痛苦,还是发现不了自己这段代码哪有问题,样例过了,过不了提交,测试点一个都不对,o(╥﹏╥)o。