題目: in:裡面有兩行英文(兩行英文都有跳行、中間都沒有空白、兩行長度都不會超過9487個字母)。 找出兩行英文中,同時存在的英文字母,不管大小寫,’a’視為與’A’相同,輸出結果到out檔。 輸出要求:要都是大寫、要照字母順序、中間不用空白、重複的字母輸出一次就好。
舉例in內容為:
DfHSag hsCdvz
在out檔輸出:
DHS
備註:若是輸出:HSD\n(沒有按照順序,算錯喔!)
解法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 #include<cstring> #include<fstream> #include<iostream> using namespace std; int main() { ifstream inStream; ofstream outStream; inStream.open("in"); outStream.open("out"); char str1[10000], str2[10000]; char str[10000], end[10000]; inStream >> str1;//第一行文字 for (int i = 0; i < strlen(str1); i++)//in檔第一行儲存到str1陣列中 { if(str1[i]<='z'&& str1[i]>='a')//小寫的情況 { str1[i] = str1[i] - 'a' + 'A';//轉為大寫 } } inStream >> str2;//第二行文字 for (int j = 0; j < strlen(str2);j++)//in檔第二行儲存到str2陣列中 { if(str2[j]<='z'&& str2[j]>='a')//小寫的情況 { str2[j] = str2[j] - 'a' + 'A';//轉為大寫 } } int a = 0, b = 0; for (int k = 0; k < strlen(str1); k++)//第一行長度 { for (int l = 0; l < strlen(str2);l++)//第二行長度 { start: if(str1[k]==str2[l])//字相同的情況 { str[a] = str1[k]; if(a==0) { end[b] = str[a]; b++; } for (int t = 0; t < a;t++) { if(str[a]!=str[t]) { if(t==a-1) { end[b] = str[a]; b++; } else { continue; } } else if(str[a]==str[t]) { l++; goto start; } } a++; } } } char order; for (int z = 0; z < strlen(end) - 1;z++) { for (int s = z+1; s < strlen(end);s++) { if(end[z]>end[s]) { order = end[z]; end[z] = end[s]; end[s] = order; } } } for (int c = 0; c < strlen(end); c++) { outStream << end[c]; } outStream << '\n'; inStream.close(); outStream.close(); }
解釋與詳細介紹 第一部分:字串陣列與ASCII Code 在這題中我們會運用到一點ASCII Code的概念。就像我們知道的,電腦只會讀取二位元的數值(0和1),那電腦要怎麼顯示為我們常見的數字或是文字系統呢?這裡介紹一個ASCII Code(美國標準資訊交換碼),他會把二進位的值一一對應為符號,舉例而言英文中大寫”A”就是由二進為”0100 0001”也就是十進位的”65”所代表;小寫”a”則是由”0110 0001”,十進位的”97”所表示。這題的轉為大寫觀念便是由ASCII Code中每個小寫英文字母均比大寫英文字母多32的差距(主功能解析部分會介紹更詳細的寫法)來達成。
想知道更多它的對應方式與由來可以參見下列網址https://zh.wikipedia.org/zh-tw/ASCII
第二部分:主功能解析 這部分就由明天再深入講解!大家可以先多查詢一些ASCII Code的知識~那我們明天見!
參考資料: https://zh.wikipedia.org/zh-tw/ASCII