作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 std::istringstream
可以很容易地读取由空格分隔的单词。但是要解析以下行,我需要将字符 /
视为空格。
f 104/387/104 495/574/495 497/573/497
如何读取由斜杠或空格分隔的值?
最佳答案
一种方法是定义一个 ctype facet,将 /
分类为空白:
class my_ctype : public std::ctype<char> {
public:
mask const *get_table() {
static std::vector<std::ctype<char>::mask>
table(classic_table(), classic_table()+table_size);
table['/'] = (mask)space;
return &table[0];
}
my_ctype(size_t refs=0) : std::ctype<char>(get_table(), false, refs) { }
};
从那里,使用该 ctype 方面为流注入(inject)语言环境,然后读取单词:
int main() {
std::string input("f 104/387/104 495/574/495 497/573/497");
std::istringstream s(input);
s.imbue(std::locale(std::locale(), new my_ctype));
std::copy(std::istream_iterator<std::string>(s),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cout, "\n"));
}
关于c++ - 如何让 std::istringstream 将给定字符视为空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15707309/
我是一名优秀的程序员,十分优秀!