Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Name: 四資工一 B10515017 林汶宜
- // Date: April 30, 2017
- // Last Update: May 2, 2017
- // Problem statement: reads this file and finds the longest word that reverses to a different word
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <vector>
- #include <algorithm>
- using namespace std;
- // Intent:把string裡的每個字都轉小寫
- // Pre: N/A
- // Post:return 轉成小寫後的string
- string& Lower(string& s)
- {
- transform(s.begin(), s.end(), s.begin(), tolower);
- return s;
- }
- int main()
- {
- fstream fin;
- string str;
- vector<string>word;
- fin.open("words.txt"); // 讀檔
- // 把檔案中的字都存進去word這個vector
- while (fin >> str)
- {
- word.push_back(str);
- }
- fin.close();
- int maxlen = 0; // 紀錄最大長度 初始化為0
- string longestWord; // 存放最長的字
- sort(word.begin(), word.end()); // 排序 (二分搜的資料必須先做過排序)
- transform(word.begin(), word.end(), word.begin(), Lower); // word這個vector裡的字都轉成小寫
- // 從頭開始找 有沒有翻轉後 也存在word裡面的字
- for (int i = 0; i < word.size(); i++)
- {
- string s = word[i]; // 暫存現在要比較的字 因為後面要翻轉 直接做的話會改變到原先的東西
- reverse(s.begin(), s.end()); // 翻轉reverse
- transform(s.begin(), s.end(),s.begin(), tolower); // 把s字串轉小寫
- //做二分搜 在word vector 從頭到尾找 s 字串
- if (binary_search(word.begin(), word.end(), s))
- {
- // 找到有相符的 且比目前的最長長度長 就變換現在的最長長度maxlen跟存放的最長的字longestWord
- if (s.length() > maxlen)
- {
- longestWord =s;
- maxlen = s.length();
- }
- }
- }
- reverse(longestWord.begin(), longestWord.end()); // 翻轉 reverse
- cout << longestWord << endl; // 輸出
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment