在 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】:

您可以改用strtokstrtok 正是你现在正在做的事情。当遇到分隔符时,它会拆分字符串

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_dotnext_dot,您已经可以访问第一个和第二个字段。 我明白了.. 现在这很有意义,现在我可以提取第一个和第二个字段.. 我用我现在使用的代码更新了我的问题.. 同样我需要提取第三个和第四个字段也是? 这在 strtok 的链接/手册中有解释。在第一次调用中,您提供要解析的字符串。在所有后续调用中,您将 NULL 作为第一个参数传递,直到 strtok 返回 NULL(不再有标记)。 而且,这是一个愚蠢的问题,但想问你 - 我应该像我目前正在做的那样拆分字符串还是应该使用 here 描述的方法 istringstream ?

以上是关于在 C++ 中拆分点上的字符串并从中提取所有字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何将此字符串拆分为 UDF

在 SQL Server 存储过程中拆分文本

在 C++ 中在左侧拆分字符串

如何在Python中返回整个字符串并从中提取列? [关闭]

如何在 C++ 中打开 Nano 并从中获取字符串?

熊猫:除非在点之前有数字或字符,否则在点上拆分