iterator不要跳过空间

iterator不要跳过空间

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

#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  "

与输入相同。

最佳答案

您将在函数末尾输出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();
}

关于c++ - ostream_iterator不要跳过空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24545748/

10-12 15:34