首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ Primer 10.3.9 單詞轉換練習深度解析

     編輯:C++ 入門

題目回顧

讀取轉換映射檔(每行 key value)與輸入文字檔,將輸入檔中出現的單詞依映射表替換,其餘保持不變,輸出轉換後的內容。命令列參數依序為映射檔與輸入檔路徑。

核心程式碼

#include 
#include 
#include 
#include 
#include 
using namespace std;

ifstream& open_file(ifstream&, const string&);

int main(int argc, char **argv) {
    map trans_map;
    string key, value;
    if (argc != 3) throw runtime_error("wrong number of arguments");
    
    ifstream map_file;
    if (!open_file(map_file, argv[1])) throw runtime_error("no transformation file");
    while (map_file >> key >> value) trans_map.insert(make_pair(key, value));
    
    ifstream input;
    if (!open_file(input, argv[2])) throw runtime_error("no input file");
    
    string line;
    while (getline(input, line)) {
        istringstream stream(line);
        string word;
        bool firstword = true;
        while (stream >> word) {
            auto map_it = trans_map.find(word);
            if (map_it != trans_map.end()) word = map_it->second;
            if (firstword) firstword = false;
            else cout << " ";
            cout << word;
        }
        cout << endl;
    }
    return 0;
}

關鍵知識點解析

1. main 函數參數 argc、argv

  • argc:命令列參數個數(含程式名稱)。
  • argv:字串陣列,argv[0] 為程式路徑,argv[1]、argv[2] 為使用者傳入的兩個檔案路徑。
  • 參數名稱可自訂(如 arc、arv),不影響功能。

2. 檔案開啟輔助函式 open_file

封裝 ifstream::open 與 clear(),便於重複使用同一串流物件開啟不同檔案。

3. map 查找與 istringstream 分詞

  • 使用 map::find 判斷單詞是否在映射表中,若在則替換。
  • istringstream 將整行字串按空白分割為單詞,處理自然換行與多重空白。

4. 輸出格式控制

firstword 旗標確保單詞間僅有一空格,行首無空格,行尾換行。

總結

此練習綜合運用:命令列參數處理、檔案 I/O、關聯容器、字串串流分詞、異常處理,是鞏固 C++ 標準庫實戰能力的優質範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved