首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 使用 cin.get() 逐字元讀入並存入字串

     編輯:程式設計綜合問答

問題

如何用 `cin.get()` 逐個讀取字元,並累積到 `std::string` 中?

標準做法

#include 
#include 

int main() {
    std::string str;
    char ch;
    
    // 讀取整行(含空格)直到換行或 EOF
    while (std::cin.get(ch)) {
        if (ch == '\n') break; // 可選:遇換行停止
        str.push_back(ch);
    }
    
    std::cout << "讀入內容: " << str << std::endl;
    return 0;
}

常見變體

  • 讀固定長度:`for (int i=0; i
  • 讀到特定分隔符:`while (std::cin.get(ch) && ch != ';') str.push_back(ch);`
  • 直接用 `std::getline`:`std::string line; std::getline(std::cin, line);`(更簡潔、高效)
  • 用 `std::istreambuf_iterator`:`std::string str((std::istreambuf_iterator(std::cin)), std::istreambuf_iterator());`(讀取所有剩餘輸入)

原始碼錯誤分析

int a[99]; // 錯誤:int 陣列非字元陣列
for(i=0,i<98,i++){ // 錯誤:逗號應為分號,條件判斷寫法錯
    a[i]=cin.get(); // cin.get() 回傳 int (EOF 為 -1),存入 int 可但非字串
}

正確應使用 `char` 或 `std::string` 累積。

最佳實踐

  1. 優先使用 `std::getline` 讀整行,或 `operator>>` 讀單詞(跳過空白)。
  2. 需逐字元處理時,用 `std::cin.get(ch)` 搭配 `std::string::push_back`。
  3. 注意 `cin.get()` 回傳 `int`(為了能表示 EOF=-1),賦值給 `char` 時隱性轉換,判斷 EOF 應用 `std::cin.get(ch)` 的布林值。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved