本題要求編寫程序,將給定字符串中的大寫英文字母按以下對應規則替換:
原字母 | 對應字母 |
---|---|
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.
代碼如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #include<string.h> 5 int main() { 6 char a[81]; 7 char b[81]; 8 gets(a); 9 //int n = strlen(a); 10 for (int i = 0; i < 81; i++) { 11 if (a[i] >= 65 && a[i] <= 90) { 12 b[i] = 155 - a[i]; 13 } 14 else { 15 b[i] = a[i]; 16 } 17 } 18 19 printf("%s", b); 20 21 return 0; 22 }
這個題目思路還是蠻簡單的,就是把這個式子算出來,如果同學們不知道咋算,我這里有一個笨辦法,就是A是65,Z是90,它倆對應,那么輸入B(ASCII碼對應的是66)時,應該輸出89,我們可以像找規律一樣,找這幾個數字之間的規律,我們發現,65+90 == 66+89 == ......== ,他們的和是150,所以就是代碼第12行的那樣子。
我剛開始做的時候,沒有用到gets(),我比較習慣用scanf(),結果發現怎么做都不好做,數據判定總有問題,我就查了查資料,用了這個gets()。
為什么數組要用到81呢,因為還要留一位存放數組的最后一位,防止數據溢出導致報錯或者數據丟失,我在pta就是因為80,而判斷出錯。
接下來寫以下剛剛查的資料
單個字符輸入的方式有:scanf(%c),getchar(),getcha(),getch()
字符串輸入方式有:scanf(%s),gets()
具體說說區別,
getchar就是一個簡潔,剩下和scanf沒有區別了
getcha沒有緩沖區,輸入一個字符就會立刻讀出,不用等待用戶回車或者其他操作。 需要頭文件conio.h,(因為Linux和MAC os沒有這個頭文件,所以只支持Windows)
getch 和getcha一樣沒有緩沖區,它的特別之處是,它沒有回顯,(看不到用戶輸入的字符),在特定場合是非常有用的。 需要頭文件conio.h
scanf() 讀取字符串時以空格為分隔,遇到空格就認為當前字符串結束了,所以無法讀取含有空格的字符串。
gets() 認為空格也是字符串的一部分,只有遇到回車鍵時才認為字符串輸入結束,所以,不管輸入了多少個空格,只要不按下回車鍵,對 gets() 來說就是一個完整的字符串。
也就是說,gets() 能讀取含有空格的字符串,而 scanf() 不能。