【问题标题】:Splitting C++ strings using a Delimiter使用分隔符拆分 C++ 字符串
【发布时间】:2022-01-28 20:46:12
【问题描述】:

好的,所以我在 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;
}

有人能以更简单的方式向我解释这一点,或者向我展示一个更容易解释的来源吗?我的主要问题是不理解某些单词。

感谢任何帮助,我真的在努力学习,但我还不太了解这些主题。

【问题讨论】:

  • 您的问题并不完全清楚-您的问题是关于按分隔符拆分字符串,但您在此处显示的代码甚至没有尝试这样做。此外,您的 string example 代码甚至无法编译 - 您是否尝试使用 Date DTime T 初始化 example
  • 看看std::get_time(),它允许您自定义解析来自任何std::istream 的日期/时间值。例如,您可以将字符串放入 std::istringstream 中,然后对其进行解析。

标签: c++ date struct split delimiter


【解决方案1】:

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

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 --> 天。9 --> 天。"
猜你喜欢
  • 2012-03-01
  • 1970-01-01
  • 2011-11-04
  • 2011-12-26
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多