牛客网_PAT乙级_1023旧键盘打字(20)【别人代码里用到的hash是啥】
生活随笔
收集整理的這篇文章主要介紹了
牛客网_PAT乙级_1023旧键盘打字(20)【别人代码里用到的hash是啥】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
心得
關于如何找到個別測試點通不過的原因:
復制別人的正確的代碼,和自己的代碼運行相同的測試用例,比較兩者之間的區別
??別人代碼里用到的hash是啥??
題目描述
舊鍵盤上壞了幾個鍵,于是在敲一段文字的時候,對應的字符就不會出現。現在給出應該輸入的一段文字、以及壞掉的那些鍵,打出的結果文字會是怎樣?
輸入描述:
輸入在2行中分別給出壞掉的那些鍵、以及應該輸入的文字。其中對應英文字母的壞鍵以大寫給出;每段文字是不超過10^5個字符的串。可用的字符包括字母[a-z, A-Z]、數字0-9、以及下劃線“_”(代表空格)、“,”、“.”、“-”、“+”(代表上檔鍵)。題目保證第2行輸入的文字串非空。
注意:如果上檔鍵壞掉了,那么大寫的英文字母無法被打出。
輸出描述:
在一行中輸出能夠被打出的結果文字。如果沒有一個字符能被打出,則輸出空行。
輸入例子:
7+IE.
7_This_is_a_test.
輸出例子:
_hs_s_a_tst
代碼
59行:注意這里對于是否為大寫字母的判斷(如果是數字或者-.,的話,+32再刪除操作會誤傷字母!!!)
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {char c;vector<char> c1;while (1){c = getchar();if (c == '\n')break;c1.push_back(c);}vector<char> c2;while (1){c = getchar();if (c == '\n')break;c2.push_back(c);}//刪除c2中的c1vector<char>::iterator iter1;vector<char>::iterator iter2;int flag;//標記是否刪除過元素,如果沒刪除過,才能讓iter++char Big;for (iter1 = c1.begin(); iter1 != c1.end(); ){flag = 0;if (*iter1 == '+')//如果shift壞了,刪除所有c2中的大寫字母{for (Big = 'A'; Big <= 'Z'; ){iter2 = find(c2.begin(), c2.end(), Big);if (iter2 != c2.end())//刪除大寫{c2.erase(iter2);}else{Big++;}}}刪除c2中的c1//刪除大寫iter2 = find(c2.begin(), c2.end(), *iter1);if (iter2 != c2.end()){c2.erase(iter2);flag = 1;}//刪除小寫//注意這里對于是否為大寫字母的判斷(如果是數字或者-.,的話,+32操作會誤傷字母!!!)if (*iter1 >= 'A'&&*iter1 <= 'Z'){iter2 = find(c2.begin(), c2.end(), *iter1 + 32);if (iter2 != c2.end()){c2.erase(iter2);flag = 1;}}if (flag == 0){iter1++;}}//用iter輸出int flag1 = 0;iter2 = c2.begin();for (iter2 = c2.begin(); iter2 != c2.end(); iter2++){cout << *iter2;flag1 = 1;}if (flag1 == 0){cout << endl;}system("pause"); }總結
以上是生活随笔為你收集整理的牛客网_PAT乙级_1023旧键盘打字(20)【别人代码里用到的hash是啥】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客网_PAT乙级_1022挖掘机技术哪
- 下一篇: 牛客网_PAT乙级_10234有理数四则