虽然有些人不会认为它特别是kosher C++,但最简单的方法可能是使用sscanf:
sscanf(A.c_str(), "tcp://%[^:]:%d", &addr, &port);
Run Code Online (Sandbox Code Playgroud)
另一种可能性是将字符串放入字符串流中,使用将大多数字母和标点符号视为空格的构面填充流,并只读取地址和端口,如:
std::istringstream buffer(A);
buffer.imbue(new numeric_only);
buffer >> addr >> port;
Run Code Online (Sandbox Code Playgroud)
方面看起来像这样:
struct digits_only: std::ctype<char>
{
digits_only(): std::ctype<char>(get_table()) {}
static std::ctype_base::mask const* get_table()
{
// everything is white-space:
static std::vector<std::ctype_base::mask>
rc(std::ctype<char>::table_size,std::ctype_base::space);
// except digits, which are digits
std::fill(&rc['0'], &rc['9'], std::ctype_base::digit);
// and '.', which we'll call punctuation:
rc['.'] = std::ctype_base::punct;
return &rc[0];
}
};
Run Code Online (Sandbox Code Playgroud)
operator>>将空格视为"字段"之间的分隔符,因此这将192.168.1.1:25视为两个字符串:"192.168.1.1"和"25".
| 归档时间: |
|
| 查看次数: |
1875 次 |
| 最近记录: |