下面的问题已经从实际需求中简化。
考虑以下程序:
该程序从一个
现在我需要向
考虑以下程序:
#include <iostream>
#include <iterator>
#include <string>
#include <set>
#include <algorithm>
using namespace std;
typedef string T; // to simplify, always consider T as string
template<typename input_iterator>
void do_something(const input_iterator& first, const input_iterator& last) {
const ostream_iterator<T> os(cout, "\n");
const set<T> words(first, last);
copy(words.begin(), words.end(), os);
}
int main(int argc, char** argv) {
const istream_iterator<T> is(cin), eof;
do_something(is, eof);
return 0;
}
该程序从一个
istream
(cin
) 中提取所有单词,并对其进行处理。默认情况下,每个单词由一个空格分隔。格式化提取的逻辑在 istream_iterator
中实现。现在我需要向
do_something()
传递两个迭代器,以便将提取的单词用标点符号而不是空格分隔(空格将被视为“正常”字符)。你会如何以“干净的C++方式”完成这个任务(即,最小的努力)?
:table_()
。 - Dietmar Kühlctype <char> :: mask
是一个typedef为char
的类型,因此所有内容都将被值初始化为零。这会清除通常的空格字符的“松散性”,但也会破坏所有其他ctype类别。没有字符会测试为“upper”、“lower”、“digit”、“xdigit”等。 - Ben Voigt