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

HDU 2072 統計單詞數:set 容器去重與 stringstream 分詞

     編輯:關於C++

題目要求

讀入多行文本,每行統計不同單詞數量。單詞由空格分隔,遇到 # 獨佔一行結束。

核心思路

  1. set<string> 自動去重
  2. stringstream 自動處理多空格、製表符等分隔符
  3. 逐行讀取 getline,清空 set,分詞插入,輸出大小

標準庫解法

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    string line;
    while (getline(cin, line)) {
        if (line == "#") break;
        set<string> dict;
        stringstream ss(line);
        string word;
        while (ss >> word) dict.insert(word);
        cout << dict.size() << '\n';
    }
    return 0;
}

手動分詞對比

不使用 stringstream 時,需手動遍歷字符串,跳過空格,提取連續非空格字符。標準庫版本更簡潔、健壯,推薦實戰使用。

關鍵點

  • getline 保留空格,適合整行處理
  • stringstream 構造函數接受 string,operator>> 自動按空白字符分割
  • set 基於紅黑樹,插入查詢 O(log n),自動有序去重
  • 每行處理前必須 dict.clear()

此題是 C++ STL 容器與流操作的基礎練習,掌握 set+stringstream 組合可輕鬆解決多數單詞統計問題。

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