知識點

①經常使用的函數及庫ios

②當心使用全局變量數組

例如:函數

#include<cstdio>spa

int g = 0; code

int f() { g++; return g; } //修改全局變量的函數 blog

int main() {ci

   int a = f();字符串

   int b = f();get

   printf("%d %d\n", a, b);string

return 0; }

運行後a!=b。

③精度問題

#include<cstdio>

int main() {

double f;

for(f = 2; f > 1; f -= 1e-6);

printf("%.7f\n", f);

printf("%.7f\n", f / 4);

printf("%.1f\n", f / 4);

return 0; }

輸出以下:

0.9999990

0.2499998

0.2

分析發現,在不斷減1e-6的過程當中出現了偏差,使得循環終止時f並不等於1,而是比1小 一點。在除以4保留1位小數時成了0.2。若是不出現偏差,正確答案應該是0.25四捨五入保留 一位小數,即0.3。有 一種方法能夠緩解這種狀況:加上一個EPS之後再輸出。這裏的EPS一般取一個比最低精度 還要小几個數量級的小實數。例如,要求保留3位小數時取EPS爲1e-6。(可是不老是可行的)

④C++ string類型

C++提供了一個新的string類型,用來替代C語言中的字符數組。用戶仍然能夠繼續用 字符數組當字符串用,可是若是但願程序更加簡單、天然,string類型每每是更好的選擇。 例如,C++的cin/cout能夠直接讀寫string類型,卻不能讀寫字符數組;string類型還能夠像 整數那樣「相加」,而在C語言裏只能使用strcat函數。

例題:輸入數據的每行包含若干個(至少一個)以空格隔開的整數,輸出每行中全部整數之和。

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() {
    string line;
    while(getline(cin, line)) {
        int sum = 0, x;
        stringstream ss(line);
        while(ss >> x) sum += x;
        cout << sum << "\n";
    }
return 0;
}

 

 

每行中全部整數之和。

string類在string頭文件中,而stringstream在sstream頭文件中。首先用getline函數讀一行數 據(至關於C語言中的fgets,但因爲使用string類,無須指定字符串的最大長度),而後用這 一行建立一個「字符串流」——ss。接下來只需像讀取cin那樣讀取ss便可。

雖然string和sstream都很方便,但string很慢,sstream更慢,應謹慎使用

相關文章
相關標籤/搜索