準備ACM/ICPC!!關於數據輸入方式的探討。

輸入的結束方式有

1.  預先確定長度,無結束符。

2.  標誌文本(如-1  和  0)。

3.  EOF文件結束符(C/C++中的符號常量,代表-1,表示文件的末尾)。

Important:

對每組數據進行分別處理。即分組讀入,然後馬上處理。而不是把文件裏的全部數據一次讀入,因爲有時根本不可能。

輸入時的操作需注意:

用cin()時 變量是通過流提取符>>從流中提取數據的,通常跳過輸入流中的  :空格 ,tab鍵,換行符,回車符等,應靈活運用:

get();getline();read(); 


以下是幾種典型的輸入:

1.   輸入有若干行。每行有一個整數,它是測試數據:

Int n;

While(cin>>n)

{

  處理n

}

2.   輸入有若干行。每行有兩個整數a,b,之間有空格隔開。直到文件結束爲止。

 Int a,b;

While(cin>>a>>b)

{

  ..處理a和b

}

  3. 輸入有若干組測試數據。每組測試數據由兩行構成,第一行是一個正整數n第二行有n個整數,之間用一個空格隔開。

Const int MAXN = 1000;

Int n,I,a[MAXN];

While(cin>>n)

{

  For(i=0;i<n; i++)

{

   Cin>>a[i]

}

處理數組a的信息

}  

4.   輸入的第一行有一個整數T,表示測試數據的組數,接下來有T行,每行是一個有空格的字符串。

Const int MAXN =1000;

..

Int T;

Char str[MAXN];

Cin>>T;//發現T根本就沒用

Cin.getline(str,10);//吸收數據T(上一行)所在行尾部的信息(比如回車什麼的)

While(Cin.getline(str,MAXN))

{

   處理有關str的信息

}

5.   輸入有若干行,每行是一個含有空格的字符串。

Const int MAXN = 1000;

Char str[MAXN];

While(Cin.getline(str,MAXN))

{

   處理str的信息

}

6.   輸入的第一行是一個整數T,表示T組測試數據。接着是這T組測試數據的描述。每組測試數據有3行,其中第一行是2個整數m,n。第二行有m個整數。第三行有n個整數。每行整數之間有一個空格。兩組測試數據之間有一空行。

。。。

Int T,m,n,I;

Int *a,*b;

Cin>>T;

While(cin>>T)

{

   Cin>>m>>n;

a=new int [m+1];

b=new int [n+1];

for(i=0; i<m; i++)cin>>a[i];

for(i=0; i<m; i++)cin>>b[i];

處理數組a和數組b的信息

}

7.   綜合版。輸入的第一行是一個整數T,表示T組測試數據。接着是T行,每行有若干個整數

   (可以綜合上述6種方法進行處理)

附帶輸出的一點東西:

輸出時應注意:

輸出的精度!!,寬度!!,行尾是否有空格??!!一組數據後是否有空行??

不常見的輸出函數:

put()函數;

#include<iostream>

using namespace std;

int main()

{

  cout.put(‘h’).put(‘e’).put(‘l’).put(‘p’)/put(‘\n’);

return 0;

}

輸出  help換行。

注意put(35);會把35解析成ASCII碼,35對應#;

write()函數:

write(String_address,output_number)有兩個參數第一個是字符串的首地址,就是字符串的名字,第二個是輸出的字符的個數

#include<iostream>

using namespace std;

int main()

{

char ch[]=”hello world”;

int length = strlen(ch);

cout.write(ch,length).put(‘\n’).write(ch,length-6);

return 0;

}

輸出:hello world換行hello

設置寬度,精度,字符填充的方法

字段寬度:

Cout.width(int);隻影響將要顯示的寬度,與setw();一樣

未完待續。。。。

參考資料:ACM/ICPC 程序設計  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章