分析分隔字符串
Parse delimited string
我怎样才能得到:
connect
100
username
example
从这个字符串:
ngg://connect>100/username>example/
将 std::string::find
与参数一起使用 "/"
和 ">"
和 std::string::substr
与找到的索引
这是一个良好的开端。
为了多样性,添加带有strtok
的答案:
char str[] = "ngg://connect>100/username>example/";
char *s = strtok(str, ">/");
std::vector<std::string> tokens;
while (s = strtok(NULL, ">/"))
tokens.push_back(std::string(s));
这会将字符串str
拆分为所需的标记(丢弃第一个ngg:
,如问题中所示)。
下面是此代码的工作示例。
一种可能性是boost::split()
:
#include <iostream>
#include <vector>
#include <string>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/split.hpp>
int main()
{
std::vector<std::string> tokens;
std::string s("ngg://connect>100/username>example/");
boost::split(tokens, s, boost::is_any_of("/>"));
// "connect" == tokens[2]
// "100" == tokens[3]
// "username" == tokens[4]
// "example" == tokens[5]
return 0;
}
ngg://connect>100/username>example/
如果此格式是固定的,则可以将std::sscanf
用作:
#include <iostream>
#include <cstdio>
int main()
{
char const *input = "ngg://connect>100/username>example/";
char const *input_format = "ngg://%[^>]>%d/%[^>]>%[^/]";
char connect[100], user[100], str[100]; //assuming max size is 100
int num;
if ( std::sscanf(input, input_format, connect, &num, user, str) != 4 )
{
std::cerr<<"error - number of tokens read must be equal to 4";
return 0;
}
std::cout << connect <<std::endl;
std::cout << num <<std::endl;
std::cout << user <<std::endl;
std::cout << str <<std::endl;
}
输出(在线演示):
connect
100
username
example
相关文章:
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 如何分隔字符串并将标记传递给方法
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- C++ 用空格和逗号分隔字符串
- 如何将字符串中的值分隔为数组
- 如何将整数值解析为逗号分隔字符串中的单独 int 变量?
- 包含换行符分隔的单词的文件和C++中这些单词的字符串向量的大小是否相同?
- 反转由空格分隔的字符串元素将返回比原始字符串更大的字符串
- 如果用户输入两个或多个由空格分隔的字符串C++如何防止缓冲区溢出?
- 如何分隔字符串并将每个部分存储在不同的向量中
- 如何按特定分隔符分隔字符串
- 字符串流分析逗号分隔的整数
- 将字节数组转换为逗号分隔的整数字符串
- 逗号分隔字符串的总和,例如 O(n) 中的 4,1,3
- 如何在C++中分隔和排列名字和全名字符串
- C++ c 字符串分隔与
- 将字符串分隔为分隔符strtok (c++)
- 如何在c++中清晰地从istream中提取字符串分隔的字符串