C++ ACM模式輸入輸出

C++ ACM模式輸入輸出

以下我們都以求和作為題目要求,來看一下各種輸入輸出應該怎么寫。

1 只有一個或幾個輸入

輸入樣例:

3 5 7

輸入輸出模板:

int main() {int a, b, c;// 接收有限個輸入cin >> a >> b >> c;// 輸出結果cout << a+b+c << endl;
}

2 先給元素個數,再給元素

先給行數T,再給出T行

輸入樣例:

3
3 5 7
6 8 9
12 9 5

輸入輸出模板:

int main() {int T;vector<int> res;// 拿到輸入行數Tcin >> T;// 接收T行輸入while (T--) {int a, b, c;cin >> a >> b >> c;res.push_back(a+b+c);}// 輸出結果for (int n : res) {cout << n << endl;}
}

先給數組元素個數,再給一行數組

n, m分別是接下來要給的兩個數組元素的個數,輸入樣例:

5 2
1 4 2 6 5
2 3

接收輸入代碼:

int main() {int n, m;cin >> n >> m;vector<int> nums(n);for (int i=0; i<n; ++i) cin >> nums[i];vector<int> lens(m);for (int i=0; i<m; ++i) cin >> lens[i];
}

3 多組輸入,讀到文件結束符EOF為止

不直接告知有多少組輸入,而是由EOF來判斷。

方法一

cin 讀到有數據輸入時會返回非0,而讀到文件結束符時會返回0,結束while循環。

int main() {int a, b;vector<int> res;while (cin >> a >> b) {res.push_back(a+b);}
}

方法二

scanf 讀到文件結束符時會返回-1,而-1的補碼表示恰好是全1,從而用按位取反得到0,此時結束 while 循環。

int main() {int a, b;vector<int> res;while (~scanf("%d%d", &a, &b)) {res.push_back(a+b);}
}

4 字符串的輸入

同樣有 cinscanf 兩種方法

方法一

int main() {const int N = 100;char s[N];scanf("%s", s);
}

方法二:

int main() {string s;cin >> s;cout << s << endl;
}

字符串的輸入有幾點需要注意:

  • C/C++ 中讀入的字符串時包含結束符 \0 的,我們需要的字符數組的長度要比真正的字符數加一;
  • cinscanf 兩種讀入方式都會忽略行首和行位的空格。

5 格式化輸入scanf

情況一

當我們面對這樣的字符串輸入:214+1352,要來計算兩數之和時,cin 就不好使了。需要我們的格式化輸入 scanf

int main() {int a, b;scanf("%d+%d", &a, &b);cout << a+b << endl;
}

情況二

如果我們會接收到一排數字,而我們想要計算其中每單個數字的和,我們也可以借助格式化輸入的 %1d 來實現,它能一位一位地讀入標準輸入:

int main() {int a;int sum = 0;while (~scanf("%1d", &a))sum += a;cout << sum << endl;
}

標準化輸入函數 scanf 還有許多奇妙的用法,有興趣可以自行查閱相關資料。

6 ASCII碼

  1. 可以根據 ASCII 碼的區間來判斷某個字符是數字還是大小寫字母等(比如通過與 'a''z'等 ASCII 碼值的大小關系)。
  2. 根據數字字符的 ASCII 碼得到數字本身的值:減去 0 的 ASCII 碼 char c='3'; int a = c-'0',整型變量 a 的值為 3。

7 整行讀取字符串

當我們不確定一行中是否有空格等特殊字符,我們可以使用 getline 進行整行讀取:

int main() {string s;getline(cin, s);cout << s << endl;
}

默認以回車作為結束,如果需要自定義,可:

getline(cin, s, '?');

補充知識

string與char數組

  1. char[] 在C/C++中均可用,string僅在C++中可用,且需要 #include <string>,一般稱 char[] 為 C 風格的字符串,稱 string 為 C++ 風格的字符串
  2. string 通常用 cin 讀入,char[] 通常用 scanf 讀入。scanf 不可以用來讀入 string
  3. char[] 構造 string:string str(s);
  4. string 轉換為 char[]:s = str.c_str();
  5. 一般直接 cin 讀取 string 會很慢,可以讀到 char[] 中,再構造為 string

printf/scanf 與 cout/cin

在讀取數據量巨大(經驗值為大于1e5個正數以上)時,cin 會很慢,這是因為 cin/cout 需要與 scanf/printf 同步。

解決方法:

  1. 改用 scanf/printf

  2. 關閉同步,改善效率(有的編譯器可行,有的無效)

    cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
    
  3. cout << endl; 除了換行之外,還會清空緩存區,而清空緩存區這件事情會耗時很久,因此為了提高速度,一般直接:cout << "\n";,會快很多

保留小數位數

  1. 如保留 3 位小數:printf("%.4f\n", a);, 此種方法會自動的四舍五入。
  2. 一位小數四舍五入成整數:float a = 2.7; printf("%d\n", int(a+0.5));

Ref:

https://www.bilibili.com/video/BV1ri4y1L7f7?from=search&seid=11052128712667700362&spm_id_from=333.337.0.0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532572.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞

漏洞產生原因&#xff1a; CVE-2017-10271漏洞產生的原因大致是Weblogic的WLS Security組件對外提供webservice服務&#xff0c;其中使用了XMLDecoder來解析用戶傳入的XML數據&#xff0c;在解析的過程中出現反序列化漏洞&#xff0c;導致可執行任意命令。攻擊者發送精心構造的…

樹莓派攝像頭 C++ OpenCV YoloV3 實現實時目標檢測

樹莓派攝像頭 C OpenCV YoloV3 實現實時目標檢測 本文將實現樹莓派攝像頭 C OpenCV YoloV3 實現實時目標檢測&#xff0c;我們會先實現樹莓派對視頻文件的逐幀檢測來驗證算法流程&#xff0c;成功后&#xff0c;再接入攝像頭進行實時目標檢測。 先聲明一下筆者的主要軟硬件配…

【實戰】記錄一次服務器挖礦病毒處理

信息收集及kill&#xff1a; 查看監控顯示長期CPU利用率超高&#xff0c;懷疑中了病毒 top 命令查看進程資源占用&#xff1a; netstat -lntupa 命令查看有無ip進行發包 netstat -antp 然而并沒有找到對應的進程名 查看java進程和solr進程 ps aux &#xff1a;查看所有進程…

ag 搜索工具參數詳解

ag 搜索工具參數詳解 Ag 是類似ack&#xff0c; grep的工具&#xff0c;它來在文件中搜索相應關鍵字。 官方列出了幾點選擇它的理由&#xff1a; 它比ack還要快 &#xff08;和grep不在一個數量級上&#xff09;它會忽略.gitignore和.hgignore中的匹配文件如果有你想忽略的文…

CVE-2013-4547 文件名邏輯漏洞

搭建環境&#xff0c;訪問 8080 端口 漏洞說明&#xff1a; Nginx&#xff1a; Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件&#xff08;IMAP/POP3&#xff09;代理服務器&#xff0c;在BSD-like 協議下發行。其特點是占有內存少&#xff0c;并發能力強&#xf…

CMake指令入門 ——以構建OpenCV項目為例

CMake指令入門 ——以構建OpenCV項目為例 轉自&#xff1a;https://blog.csdn.net/sandalphon4869/article/details/100589747 一、安裝 sudo apt-get install cmake安裝好后&#xff0c;輸入 cmake -version如果出現了cmake的版本顯示&#xff0c;那么說明安裝成功 二、c…

CVE-2017-7529Nginx越界讀取緩存漏洞POC

漏洞影響 低危&#xff0c;造成信息泄露&#xff0c;暴露真實ip等 實驗內容 漏洞原理 通過查看patch確定問題是由于對http header中range域處理不當造成&#xff0c;焦點在ngx_http_range_parse 函數中的循環&#xff1a; HTTP頭部range域的內容大約為Range: bytes4096-81…

Linux命令行性能監控工具大全

Linux命令行性能監控工具大全 作者&#xff1a;Arnold Lu 原文&#xff1a;https://www.cnblogs.com/arnoldlu/p/9462221.html 關鍵詞&#xff1a;top、perf、sar、ksar、mpstat、uptime、vmstat、pidstat、time、cpustat、munin、htop、glances、atop、nmon、pcp-gui、collect…

Weblogic12c T3 協議安全漏洞分析【CVE-2020-14645 CVE-2020-2883 CVE-2020-14645】

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 關注公眾號&#xff1a;b1gpig信息安全&#xff0c;文章推送不錯過 ## 前言 WebLogic是美國Oracle公司出品的一個application server,確切的說是一個基于JAV…

Getshell總結

按方式分類&#xff1a; 0x01注入getshell&#xff1a; 0x02 上傳 getwebshell 0x03 RCE getshell 0x04 包含getwebshell 0x05 漏洞組合拳getshell 0x06 系統層getcmdshell 0x07 釣魚 getcmdshell 0x08 cms后臺getshell 0x09 紅隊shell競爭分析 0x01注入getshell&#xff1a;…

編寫可靠bash腳本的一些技巧

編寫可靠bash腳本的一些技巧 原作者&#xff1a;騰訊技術工程 原文鏈接&#xff1a;https://zhuanlan.zhihu.com/p/123989641 寫過很多 bash 腳本的人都知道&#xff0c;bash 的坑不是一般的多。 其實 bash 本身并不是一個很嚴謹的語言&#xff0c;但是很多時候也不得不用。以下…

python 到 poc

0x01 特殊函數 0x02 模塊 0x03 小工具開發記錄 特殊函數 # -*- coding:utf-8 -*- #內容見POC.demo; POC.demo2 ;def add(x,y):axyprint(a)add(3,5) print(------------引入lambad版本&#xff1a;) add lambda x,y : xy print(add(3,5)) #lambda函數,在lambda函數后面直接…

protobuf版本常見問題

protobuf版本常見問題 許多軟件都依賴 google 的 protobuf&#xff0c;我們很有可能在安裝多個軟件時重復安裝了多個版本的 protobuf&#xff0c;它們之間很可能出現沖突并導致在后續的工作中出現版本不匹配之類的錯誤。本文將討論筆者在使用 protobuf 中遇到的一些問題&#…

CMake常用命令整理

CMake常用命令整理 轉自&#xff1a;https://zhuanlan.zhihu.com/p/315768216 CMake 是什么我就不用再多說什么了&#xff0c;相信大家都有接觸才會看一篇文章。對于不太熟悉的開發人員可以把這篇文章當個查找手冊。 1.CMake語法 1.1 指定cmake的最小版本 cmake_minimum_r…

CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞復現 目錄穿越漏洞

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; CVE-2021-41773漏洞描述&#xff1a; Apache HTTPd是Apache基金會開源的一款流行的HTTP服務器。2021年10月8日Apache HTTPd官方發布安全更新&#xff0c;披…

SSRF,以weblogic為案例

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 復習一下ssrf的原理及危害&#xff0c;并且以weblog的ssrf漏洞為案例 漏洞原理 SSRF(Server-side Request Forge, 服務端請求偽造) 通常用于控制web進而…

C++11 右值引用、移動語義、完美轉發、萬能引用

C11 右值引用、移動語義、完美轉發、引用折疊、萬能引用 轉自&#xff1a;http://c.biancheng.net/ C中的左值和右值 右值引用可以從字面意思上理解&#xff0c;指的是以引用傳遞&#xff08;而非值傳遞&#xff09;的方式使用 C 右值。關于 C 引用&#xff0c;已經在《C引用…

C++11 std::function, std::bind, std::ref, std::cref

C11 std::function, std::bind, std::ref, std::cref 轉自&#xff1a;http://www.jellythink.com/ std::function 看看這段代碼 先來看看下面這兩行代碼&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(Ev…

Java安全(一) : java類 | 反射

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1.java基礎 Java平臺共分為三個主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平臺標準版&#xff09;、Java EE&#xff0…

LeetCode-287 尋找重復數 二分法

LeetCode-287 尋找重復數 二分法 287. 尋找重復數 給定一個包含 n 1 個整數的數組 nums &#xff0c;其數字都在 1 到 n 之間&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 &#xff0c;找出 這個重復的數 。…