juinda

reversal

Jun 14th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. // Name: 四資工一 B10515017 林汶宜
  2. // Date: April 30, 2017
  3. // Last Update: May 2, 2017
  4. // Problem statement: reads this file and finds the longest word that reverses to a different word
  5.  
  6. #include <iostream>
  7. #include <fstream>
  8. #include <string>
  9. #include <vector>
  10. #include <algorithm>
  11. using namespace std;
  12.  
  13. // Intent:把string裡的每個字都轉小寫
  14. // Pre: N/A
  15. // Post:return 轉成小寫後的string
  16. string& Lower(string& s)
  17. {
  18. transform(s.begin(), s.end(), s.begin(), tolower);
  19. return s;
  20. }
  21.  
  22. int main()
  23. {
  24. fstream fin;
  25. string str;
  26. vector<string>word;
  27. fin.open("words.txt"); // 讀檔
  28.  
  29. // 把檔案中的字都存進去word這個vector
  30. while (fin >> str)
  31. {
  32. word.push_back(str);
  33. }
  34.  
  35. fin.close();
  36.  
  37. int maxlen = 0; // 紀錄最大長度 初始化為0
  38. string longestWord; // 存放最長的字
  39. sort(word.begin(), word.end()); // 排序 (二分搜的資料必須先做過排序)
  40.  
  41. transform(word.begin(), word.end(), word.begin(), Lower); // word這個vector裡的字都轉成小寫
  42.  
  43. // 從頭開始找 有沒有翻轉後 也存在word裡面的字
  44. for (int i = 0; i < word.size(); i++)
  45. {
  46. string s = word[i]; // 暫存現在要比較的字 因為後面要翻轉 直接做的話會改變到原先的東西
  47. reverse(s.begin(), s.end()); // 翻轉reverse
  48. transform(s.begin(), s.end(),s.begin(), tolower); // 把s字串轉小寫
  49. //做二分搜 在word vector 從頭到尾找 s 字串
  50. if (binary_search(word.begin(), word.end(), s))
  51. {
  52. // 找到有相符的 且比目前的最長長度長 就變換現在的最長長度maxlen跟存放的最長的字longestWord
  53. if (s.length() > maxlen)
  54. {
  55. longestWord =s;
  56. maxlen = s.length();
  57. }
  58. }
  59. }
  60. reverse(longestWord.begin(), longestWord.end()); // 翻轉 reverse
  61. cout << longestWord << endl; // 輸出
  62. return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment