C++處理輸入字串並轉為陣列
阿新 • • 發佈:2018-12-31
最近在做題的時候在處理輸入時遇到一個令人頭疼的問題,今天解決了和大家分享一下:
比如題目要求的輸入為一行數,數與數之間用空格間隔開,數的個數未知,數也有正有負:
11 -2 65 7
那麼如何把這個輸入儲存到陣列a中,且陣列a中的值為a[0]=11,a[1]=-2,a[3]=65,a[4]=7呢?
先看程式碼:
#include <iostream> #include <stdio.h> using namespace std; int main() { int a[20]; int i = 0; cin>>a[i++]; while(getchar()!='\n') { cin>>a[i++]; } for(int j=0;j<i;j++) { cout<<"a["<<j<<"]:"<<a[j]<<endl; } }
關於getchar()函式:
該函式返回輸入流的每一個字元,在這段程式中當該函式判斷當前字元不是換行符時,則輸入流cin向陣列寫入一個數字。
有的同學可能會問為什麼這裡會寫一整個數字而不是一個字元,這裡說一些我的見解,我們平時使用cin時,一般都是這樣使用的:cin>>a>>b,在控制檯實際輸入時a和b是以空格分開的,也就是說cin會一直讀入字元直到遇到空格或換行符,那麼我們的程式裡的cin也就一直讀入字元了。
其他問題:
該程式可以處理以任何字元分隔數字的字串,包括冒號分號甚至小數點,目前還不知原因為何
參考: