習題7-7 字符串替換


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

原字母 對應字母
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() 不能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM