ostream_iterator不会跳过空格

时间:2014-07-03 05:40:43

标签: c++ string

我有这样的代码,我很困惑为什么字符串中的空格没有被修剪?

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <sstream>
#include <iterator>

using namespace std;

template <typename T>  //T type of stream element
void trimspace2(std::string str) //user istream_iterator  suppose it's a number string
{
  istringstream iss(str),ise("");
  ostringstream oss(str);
  copy(istream_iterator<T>(iss),istream_iterator<T>(ise),ostream_iterator<T>(oss," "));
  cout << str << endl;
}

int main() 
{
  std::string str = " 20 30    100  ";
  trimspace2<int>(str);
  return 0;
}

输出

" 20 30    100  "

与输入相同。

1 个答案:

答案 0 :(得分:2)

您正在输出函数末尾的str输入参数。将最后一行更改为:

cout << oss.str() << endl;

哦,你不应该使用str来构建oss

ostringstream oss;

根据您在下方的评论,我认为您需要以下内容:

template <typename T>
void trimspace2(std::string &str)
{
    istringstream iss(str);
    ostringstream oss;
    copy(istream_iterator<T>(iss),istream_iterator<T>(),ostream_iterator<T>(oss," "));
    str = oss.str();
}