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

C++ 從標準輸入讀取一行整數到數組:兩種高效方法

     編輯:C++ 入門

問題描述

輸入一行以空格分隔的整數,長度不固定,需存入數組。例如:1 123 1234 22 → a[0]=1, a[1]=123, a[2]=1234, a[3]=22。

方法一:getchar + ungetc + cin 混合

利用 getchar() 逐字符讀取,遇到數字時用 ungetc() 放回流,再用 cin >> a[i] 直接讀取整數,自動跳過空格。

int a[50], i = 0;
char c;
while ((c = getchar()) != '\n') {
    if (c >= '0' && c <= '9') {
        ungetc(c, stdin);
        cin >> a[i++];
    }
}

優點:無需手動解析數字邊界,利用流提取器自動處理。

方法二:字符串緩衝 + atoi

逐字符構建當前數字字符串,遇到空格或換行時 atoi 轉換存入。

int a[50], i = 0;
char c; string buf;
while ((c = getchar()) != '\n') {
    if (c >= '0' && c <= '9') buf += c;
    else if (c == ' ') { a[i++] = atoi(buf.c_str()); buf.clear(); }
}
if (!buf.empty()) a[i++] = atoi(buf.c_str()); // 最後一個數

方法三:C++11 全獲取行 + stringstream(推薦)

最簡潔健壯:

string line;
getline(cin, line);
stringstream ss(line);
vector a;
int x;
while (ss >> x) a.push_back(x);
// a 即為結果數組

對比總結

方法優點缺點
getchar+ungetc無需緩衝區,流式處理混用 C/C++ IO 需注意同步
string+atoi邏輯直觀,無依賴需手動處理最後一個數
getline+stringstream標準庫、自動分割、動態擴容略多分配內存

最佳實踐建議

現代 C++ 首選 getline + stringstream 或直接 while (cin >> x) vec.push_back(x)(若輸入不換行)。若輸入量極大(百萬級),可用快速 IO(scanf、自定義快速讀)。

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