1. 程式人生 > >C++處理輸入字串並轉為陣列

C++處理輸入字串並轉為陣列

    最近在做題的時候在處理輸入時遇到一個令人頭疼的問題,今天解決了和大家分享一下:

比如題目要求的輸入為一行數,數與數之間用空格間隔開,數的個數未知,數也有正有負:

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也就一直讀入字元了。

其他問題:

該程式可以處理以任何字元分隔數字的字串,包括冒號分號甚至小數點,目前還不知原因為何

參考: