题面:输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下列的对应大写字母替换,其余字符不变,输出替换后的字符串。
思路:我们可以利用ASCLL码来做,26字母我们就用两个字符数组分别存放两组大写字母,字符数组 add[ ] 存取字母A——M,字符数组 loss[ ] Z——N,然后用循环嵌套判断:单次筛选用户输入中大写字母进行单次替换。
如: hEllo ,循环第一轮 h 判断是否为小写然后下一轮,第二轮判断为大写,进入第二轮判断此数属于 add 数组中还是 loss,若属于用对应 loss 数组位置替换,若输入 loss 用对应 add 数组位置替换。
代码如下:
#include<stdio.h> #include<string.h> void change(char A[],int length); int main(void) { //定义字符串数组a存储用户输入 char a[80]; scanf("%s",a); change(a,strlen(a)); //调用change函数替换字符 ,strlen函数计算字符串长度 printf("%s",a); return 0; } void change(char a[],int length){ //字符数组 add[] 存取字母A——M,字符数组 loss[] Z——N const int size=13; int i=0; char add[size]; char loss[size]; char A='A',Z='Z'; while( i < 13){ //这个循环让它自己一个个填上去,你直接初始化字面量都可以 add[i]=A++; loss[i]=Z--; i++; } i=0; int count=0; while( i < length){ if( a[i] < 91){ //用ASCLL码筛选大写字母,ASCLL码值:A=65,Z=90 ,a=97,z=122 int j; if( a[i] <= 77 ){ //判断此字符在add中还是loss ,分界线 M,或者用 N都可以 for(j=0; j<14; j++){ if(a[i] == add[j]) a[i]=loss[j]; //在add中,用对应loss数组位置替换 } }else{ for(j=0; j<14; j++){ //在loss中,用对应add数组位置替换 if(a[i] == loss[j]) a[i]=add[j]; } } } i++; } }
编译运行:
字符串替换
最新推荐文章于 2023-01-19 18:39:00 发布