程式設計競賽中 C/C++ I/O 的使用

TTMoon發表於2024-05-11

C 的字串讀取

scanf以空行為分割進行讀取資料。

getfgets\n為分割讀取資料。讀取輸入直到遇到\n\0 才終止。

C++ 讀取字串

cin 以空格為分割讀取資料。getline 預設以換行符為分割讀取資料。在使用 getline 時,要注意處理 多個\n 連到一塊的情況。當讀取77\n\n77 時,第二次會讀到空行,可使用while(getchar()!='\n'); 消除多餘的換行符。

另外getline 的第三個引數可以指定分割符,可根據需要使用。C++11 中 getline 的一個宣告:istream& getline (istream& is, string& str, char delim);

IO 同步問題

C++ iostream預設是和stdio同步的,這使得iostream的效能下降。在競賽題目的資料量大時於就會超時。可以透過關閉io同步解決這個問題,當然也可以使用 C 語言的 stdio,完全看個人喜好(建議只用一種)。

// 關閉 C++ io 同步
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

字串處理常用

s.c_str() 轉換為 c 風格字串(char *s)。

s.substr(pos, len) 返回 pos 位置開始,長度為len的子串,如果字元數不夠到結束為止。

s.find("string") 返回子字串的下標,返回型別為usinged

Hello World! 輸出

#include <bits/stdc++.h>

int main()
{
    puts("Hello World!");
    printf("Hello World!\n");
    std::cout << "Hello World!" << std::endl;
}

執行結果:

Hello World!
Hello World!
Hello World!

參考資料:

  • https://cplusplus.com/reference/string/string/getline/

  • std::cin, std::wcin - cppreference.com

相關文章