天天看點

習題7-7 字元串替換(15 分)

本題要求編寫程式,将給定字元串中的大寫英文字母按以下對應規則替換:

原字母 對應字母
A Z
B Y
C X
D W
X C
Y B
Z A

輸入格式:

輸入在一行中給出一個不超過80個字元、并以回車結束的字元串。

輸出格式:

輸出在一行中給出替換完成後的字元串。

輸入樣例:

Only the 11 CAPItaL LeTtERS are replaced.
           

輸出樣例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.
           
#include <stdio.h>  
#include <string.h> 
//本題要求編寫程式,将給定字元串中的大寫英文字母按以下對應規則替換:
//原字母 對應字母
///A Z
//B	Y
//C	X
//D	W
//…	…
//X	C
//Y	B
//Z	A

//  規律  大寫字母之和是一個常數,根據此關系編寫程式即可。 
int main()  
{   	//輸入在一行中給出一個不超過80個字元、并以回車結束的字元串。
	char a[80],b[26];//b數組儲存26個大寫字母 
	int d,i,j,k,p;
	i=0;
	while((d=getchar())!='\n'){
		a[i]=(char)d;
		i++;
	}
	a[i]='\0';
	p=i;
	
	int l=65;	 
	for(i=0;i<26;i++){
		b[i]=l;
		l++; 
	}

	//輸出在一行中給出替換完成後的字元串。
	k=0;
	for(j=0;j<p;j++){   //,,學的有點傻 i 在for循環中的反複使用 會導緻i的數變化 以前不知道為什麼 總以為不改變
		for(i=0;i<26;i++){   //這裡的P保留了最先的i的值
			if(a[j]>='A'&&a[j]<='Z'&&(a[j]+b[i])==155){
				 a[j]=b[i];
				 break; //善待break 哈哈哈 跳出最接近的循環
 			}
		}
	}
	
	for(j=0;j<p;j++){
		printf("%c",a[j]);		
	}
	
    return 0;  
  
}