使用getline和stringstream来切割字符串

时间:2017-04-30 23:38:11

标签: c++ string stream slice getline

我在空格处切割字符串时遇到了麻烦。这是我的代码。

#include <sstream>
#include <iostream>
#include <vector>
#include <string>    
void formatData(std::string rawTime) {
std::stringstream rawStream(rawTime);
std::string month, time, temp, date, timePeriod = "";
int day, year, monthNum;
std::vector<std::string> segments;

while (std::getline(rawStream, temp, ' ')) {
    segments.push_back(temp); //now have a vector of {"MM-DD-YYYY", "HH:MM:SS", "XM"} 
}
date = segments[0];
time = segments[1];
if (segments.size() > 2)
    timePeriod = segments[2];
///code that assigns month, day and year values
std::cout << "You were born on " << month << " " << day << ", " << year << " at " << time; }

main()只接受一个输入,将其放入一个字符串,然后将该字符串传递给上面的formatData()函数。

当我使用输入'08 -27-1980 10:56:59'运行此代码时,我的代码在“time = segments [1]”行中断,我得到一个“向量下标超出范围”错误。我希望程序将输入字符串分成两个字符串,并将每个字符串放入向量段。然而,这不是正在发生的事情。这里发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:0)

rawStream已经是一个字符串流,所以你可以尝试一个有用的小技巧。您可以使用重载的&gt;&gt;而不是将getline用于空间。象征ios的一部分。

while(rawStream >> temp){
  ...
}