1. 程式人生 > >從螢幕輸入一行數字,以空格分隔,如何分別存放到陣列中

從螢幕輸入一行數字,以空格分隔,如何分別存放到陣列中

要求:

在螢幕中,輸入一行數字,以空格分隔,其中每個數字的長度不一定一樣,要求將這些數字分別存放到陣列中。

例如: 

輸入: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;
	}
}