使用分隔符分割C++字符串

3

好的,我在StackOverflow上查找了一种通过分隔符分割C++的方法。

到目前为止,我看了这些内容,但仍然不理解:

从我的理解来看,我需要使用一个变量来存储分隔符,并使用substr()方法/函数,但我不理解整个过程。

例如,我看到一个例子引用了posnpos,但我不理解那是什么。另外,我也不知道如何处理包含多个相同分隔符的字符串。

我的目标是将这样的日期:"29/01/2022 • 05:25:01"拆分成一个日期和时间的结构体,例如:

struct Date
{
    int day;           //Integer for days
    int month;         //Integer for months
    int year;          //Integer for years
};

struct Time 
{
    int hour;           //Integer for hour of drop
    int minute;         //Integer for minute of drop
    int second;         //Integer for second of drop
    int milisecond;     //Integer for milisecond of drop
};

我也看过https://www.cplusplus.com/reference/,但我想将它们拆分存储在自己的变量中,例如:

string example
{
    struct Date D;
    struct Time T;

    D.Day = 29;
    D.Month = 01;
    D.Year = 2022;

    T.Hour = 5;
    T.Minute = 25;
    T.Second = 01;
}

有人可以用更加简单易懂的方式解释下这个问题吗?或者给我一个更容易理解的来源?我的主要难点是不理解某些词汇。

非常感谢任何帮助,我真的很想学习,但我还不太理解这些主题。


2
不是很清楚你的问题 - 你的问题是关于通过分隔符拆分字符串,但你在这里展示的代码甚至没有尝试。此外,你的带有string example的代码甚至无法编译 - 你是想用你的Date DTime T初始化example吗? - dwcanillas
请查看std::get_time(),它允许您从任何std::istream自定义解析日期/时间值。例如,您可以将字符串放入std::istringstream中,然后进行解析。 - Remy Lebeau
1个回答

3

让我们一步一步来,从日期开始:

29/01/2022  -- Day, Month, Year.  

鉴于以下内容:

unsigned int day = 0u;
std::cin >> day;

输入整数时会忽略所有空格,直到第一个数字字符(对于第一个数字字符,也包括'+'和'-')。抽取运算符一直读取字符,构建数字,直到达到非数字字符:

2 --> 天。 9 --> 天。

下一个字符是'/',它不是数字字符,因此抽取运算符返回数字29

在这种情况下,'/'字符被称为分隔符,因为它将日字段与月字段分开。
由于它是一个字符,所以必须使用字符变量来读取:

char delimiter = '\0';  
std::cin >> delimiter;

现在分隔符不再在缓冲区中。您可以检查分隔符变量的内容或继续执行。

读取月份的操作类似:

unsigned int month = 0U;
std::cin >> month;

编辑1:分隔符和子字符串
您可以使用分隔符将月份提取为字符串:

std::string month_as_text;
std::getline(std::cin, month_as_text, '/');

上述的 getline 函数从 std::cin 中读取字符,将其放置在字符串 month_as_text 中,直到找到分隔符字符 '/' 为止。然后,您可以将 month_as_text 转换为整数变量。

能否请您详细解释一下这段话,因为我不太理解:“输入整数时会跳过空格直到第一个数字字符(对于第一个数字字符,也包括'+'和'-')。提取运算符会继续读取字符,构建数字,直到遇到非数字字符:2 --> day. 9 --> day." - Silence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接