c++读入一行
8
13:00:00 - 18:00:00
00:00:00 - 01:00:05
08:00:00 - 09:00:00
07:10:59 - 08:00:00
01:00:05 - 04:30:00
06:30:00 - 07:10:58
05:30:00 - 06:30:00
18:00:00 - 19:00:00
被下面的報錯折磨了一個半小時:
terminate called after throwing an instance of 'std::out_of_range'what(): basic_string::substr: __pos (which is 11) > this->size() (which is 0)基本題意就是輸出沒有包含的時間段,因為題目保證了給定的兩個時間段之間最多只有一個交點,也就是沒有區間重合的情形,所以思路就很簡單,直接按照字符串的格式讀進來排序遍歷一遍就好。
C++讀取一行可以用getline(cin,tmp),第三個參數默認為換行,也可以自行設定以什么為間隔,其中tmp是string類型的變量,getline()需要#include< string >;
還可以用cin.getline(char *, int size), 定義一定大小的字符數組傳入,讀入size大小的長度,size中包含’\0’,如果一行中輸入的長度大于size,后面的會丟掉,所以就記住用它必須保證讀完一行,第三個參數默認為換行,也可以自行設定以什么為間隔。一般情況下size和字符數組的大小一樣就好了。
但是要注意getline或者cin.getline()前面如果有cin或者scanf,一定要先getchar()吸收一下換行!!!,最離譜的是,沒有getchar(),下面的代碼還能排序,排好序之后還能for循環輸出,但是一旦獲取某個特定的元素,即str[i]就會是空,str[i].size()為0,原來是因為讀入失敗的問題…
當然其實遇到困難不要總是嘗試一種方法,既然無法讀取一行,以空格分隔讀進來也是可以處理的,一種方法行不通就換方法吧,不要執念于一種方法。
ps:同樣能AC的代碼,用java只能17/25,最后兩個點超內存,還是少用java
寫算法題吧。。。
總結
- 上一篇: 2020年最新一二三线互联网公司出炉,附
- 下一篇: 如何免费下载IEEE论文