将字符串拆分为令牌-不包含操作系统特定的函数
Split string into tokens - without OS-specific functions
可能重复:
如何在C++中标记字符串?
strtok函数不是线程安全的。Microsoft具有特定于Windows的strtok_s和CString::Tokenize安全函数。有没有跨平台CRT/C++库的方法可以在没有手动编码的情况下做到这一点?
boost::split
。http://www.boost.org/doc/libs/1_51_0/doc/html/string_algo/reference.html#header.boost.algorithm.string.split_hpp
使用示例
#include <vector>
#include <string>
#include <boost/algorithm/string.hpp>
int main()
{
const std::string s = "hello and what";
std::vector<std::string> v;
boost::split(v, s, [](char c) { return c == ' '; }, boost::token_compress_on);
for (const auto& str : v)
{
std::cout << str << std::endl;
}
}
http://liveworkspace.org/code/3dfc9ee9c8497741f9976ac41a14a390
或者使用boost::tokenizer
strtok()
的线程安全版本是strtok_r()
。它也符合POSIX。
实际上,strtok()
通常是线程安全的(实际上,任何支持多线程操作系统的运行时都会有线程安全的strtok()
)。strtok()
不能用于以"交替"的方式标记不同的字符串,但这种情况非常罕见,并且受代码控制。
然而,也就是说,strtok_r()
是一个常见的(虽然不是C标准的一部分,但它是POSIX)变体,可以让您保持对上下文的控制,这样您就可以随心所欲地同时处理任意多的strtok_r()
上下文。它不适用于MSVC,但您可以在此处找到公共域实现:http://snipplr.com/view/16918/
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- 为什么 free() 函数不将内存返回给操作系统?
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- 程序在没有操作系统信号的情况下在函数中的特定行挂起
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- ICU ustdio.h函数:使用CMake构建时,在Mac操作系统上使用未定义的符号
- 执行基于 Windows 操作系统的条件函数
- 将字符串拆分为令牌-不包含操作系统特定的函数
- 时间短函数与 CPU 时间使用 RTEMS 操作系统
- 如何在Windows操作系统的情况下将数据从OpenCV或C++线程函数返回到主线程
- boost::asio库的async_*函数是否由操作系统并行执行?
- 在我自己的操作系统内核上的c++静态构造函数
- 分析底层Linux操作系统函数/代码,如select()和poll()
- 通过c++与操作系统函数交互