這次的題目是這題
http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=30782
字母往前移
輸入說明
第一行為想輸入的內容,不超過 100 個字
第二行為打完你想輸入的內容之後,換行輸入你想要往後替代的數目。
輸出說明
印出轉換後的句子。
範例
Sample Input |
Sample Output |
How are you? 2 |
Jqy ctg aqw? |
這題要注意的是
1.大小寫字母的區別
2.數字也要有後退代替
3.後退到Z之後或到9之後要從頭繼續
只要設想到以上幾點,這題就沒什麼問題了
首先宣告輸入
再來題目要求輸入的長度不能超過100
所以程式碼這樣寫
之後是用迴圈走訪字串裡面的字元
如果字元是"大寫字母"、"小寫字母"、"數字"這些情況
就要用後退替代
先宣告一個trash
int trash=input[i];
代表的意義是這個字元的ASCII code
想要後退的話,就讓trash加上需要後退的位數
也就是如果"j"後退2位的話,且"j"的trash=ASCII code是106
再來trash加上2,變成108,而108這個ASCII code對應到的是"l"(小寫L)這個字母
就達到後退的效果
接下來是程式碼
如果是小寫字母,到"z"以後必須從頭,所以加上後如果超過122則減掉26
大寫也是一樣道理,超過90減掉26
而數字則超過57的話要減掉10
最後把trash的值存回input[i]再印出,到這裡都還在迴圈裡
所以是"一個一個"字元的印出,在迴圈外面再印個換行
完整的程式碼
- #include <iostream>
- #include <string.h>
- using namespace std;
- int main()
- {
- string input;
- int num;
- getline(cin,input);
- cin>>num;
- int len=input.size();
- if(len<101)
- {
- for(int i=0;i<len;i++)
- {
- int trash=input[i];
- if(trash>='a' && trash<='z')
- {
- trash+=num;
- if(trash>122)
- trash-=26;
- }
- else if(trash>='A' && trash<='Z')
- {
- trash+=num;
- if(trash>90)
- trash-=26;
- }
- else if(trash>='0' && trash<='9')
- {
- trash+=num;
- if(trash>57)
- trash-=10;
- }
- input[i]=trash;
- cout<<input[i];
- }
- cout<<endl;
- }
- return 0;
- }
結果
這題就完成啦
若想閱讀相關文章請關注我的粉絲團
小資菜鳥向前衝
留言列表