在 C++ 中拆分点上的字符串并从中提取所有字段?
Posted
技术标签:
【中文标题】在 C++ 中拆分点上的字符串并从中提取所有字段?【英文标题】:Split the string on dot and extract all the fields from it in C++? 【发布时间】:2013-11-14 20:26:46 【问题描述】:我试图在点上拆分我的实际键,然后在点上拆分后提取所有字段。
我的钥匙看起来像这样 -
@event.1384393612958.1136580077.TESTING
目前,我只能提取第一个字段 @event
在点上拆分后。现在如何提取所有其他字段。下面是我的代码,我目前正在从中提取第一个字段。
if (key)
char* first_dot = strchr(key, '.');
if (first_dot)
// cut at the first '.' character
first_dot[0] = 0;
cout << "Fist Key: " << key << endl;
然后在提取单个字段后,将第二个字段存储为uint64_t
,将第三个字段存储为uint32_t
,最后一个字段存储为string
。
更新:-
这就是我现在得到的——
if (key)
char *first_dot = strtok(key, ".");
char *next_dot = strtok(NULL, ".");
uint64_t secondField = strtoul(next_dot, 0, 10);
cout << first_dot << endl;
cout << secondField << endl;
我可以从中提取第一个和第二个字段。第三场和第四场呢?
【问题讨论】:
“提取”字段是一回事,但您想对结果做什么?存储在某个地方? 哎呀抱歉,是的,将它存储在某个地方..让我更新问题.. 那就是重复的:***.com/a/237280/912757 【参考方案1】:您可以改用strtok
。 strtok
正是你现在正在做的事情。当遇到分隔符时,它会拆分字符串
if (key)
char *first_dot = strtok(key, ".");
...
char *next_dot = strtok(NULL, ".");
可以使用strtoul/strtoull
转换为int
类型
uint64_t i = strtoul(next_dot, 0, 10);
【讨论】:
例如,谢谢。现在我想知道如何从中提取单个字段?请原谅我对 C++ 的无知。我最近开始使用它。感谢您的帮助。 提取字段是什么意思?使用first_dot
或next_dot
,您已经可以访问第一个和第二个字段。
我明白了.. 现在这很有意义,现在我可以提取第一个和第二个字段.. 我用我现在使用的代码更新了我的问题.. 同样我需要提取第三个和第四个字段也是?
这在 strtok 的链接/手册中有解释。在第一次调用中,您提供要解析的字符串。在所有后续调用中,您将 NULL 作为第一个参数传递,直到 strtok 返回 NULL(不再有标记)。
而且,这是一个愚蠢的问题,但想问你 - 我应该像我目前正在做的那样拆分字符串还是应该使用 here 描述的方法 istringstream
?以上是关于在 C++ 中拆分点上的字符串并从中提取所有字段?的主要内容,如果未能解决你的问题,请参考以下文章