我有这样的代码,我很困惑为什么字符串中的空格没有被修剪?
#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 "
与输入相同。
答案 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();
}