要求:
在屏幕中,輸入一行數字,以空格分隔,其中每個數字的長度不一定一樣,要求將這些數字分別存放到數組中。
例如:
輸入:1 123 1234 22 345 25 5
對應的數組的值應該為a[0]=1,a[1]=123,a[2]=1234,a[3]=22,a[4]=345,a[5]=25,a[6]=5;
輸入:2345 23 124 2
對應的數組的值應該為a[0]=2345,a[1]=23,a[2]=124,a[3]=2;
這個問題的難點是如何在輸入的一串字符中找到連續的數字作為一個數值,然后保存到數組中。
方法一:
利用getchar函數和ungetc函數,通過getchar函數判斷回車,以及判斷時候為數字,然后通過ungetc函數,將通過getchar函數獲得的字符送回緩沖區,再通過cin函數取出作為int型數組。
程序代碼:
#include<iostream> using namespace std; int main() { int a[50]; int i = 0; char c; while((c=getchar())!='\n') { if(c>='0'&&c<='9') { ungetc(c,stdin); cin>>a[i++]; } } for(int j=0;j<i;j++) { cout<<"a["<<j<<"]:"<<a[j]<<endl; } }運行結果:
方法二:
使用字符串保存連續的數字,以獲得完整的整數,每當遇到空格的時候,string變量就清空,然后從新獲取一個連續的數字。可以通過string的c_str函數將string變量轉化為char型的,然后通過atoi函數再轉化為數字。
#include<iostream> #include<cstdlib> using namespace std; int main() { int a[50]; int i = 0; char c; string str = ""; while((c=getchar())!='\n') { if(c>='0'&&c<='9') { str += c; } else if(c ==' ') { a[i++] = atoi(str.c_str()); str = ""; } } for(int j=0;j<i;j++) { cout<<"a["<<j<<"]:"<<a[j]<<endl; } }