使用定界符拆分 C++ 字符串
Splitting C++ strings using a Delimiter
好的,所以我在 Whosebug 上四处寻找,偶然发现了一种通过定界符拆分 C++ 的方法。
目前看了这些,还是没看懂
- Parse (split) a string in C++ using string delimiter (standard C++)
- https://www.oreilly.com/library/view/c-cookbook/0596007612/ch04s07.html
- C++ spliting string by delimiters and keeping the delimiters in result
根据我的理解,我需要使用分隔符,使用包含分隔符的变量,然后使用 substr()
method/function,但我不明白整个事情。
例如,我看到一个例子,其中引用了 pos
和 npos
,我不明白。我的另一个问题是,我不知道如何使用具有相同定界符的多个副本的字符串来做到这一点。
我的目标是采用这样的日期:"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;
}
有人能用更简单的方式向我解释一下,或者给我一个更容易解释的来源吗?我的主要问题是某些单词听不懂。
感谢任何帮助,我真的很想学习,但我还不太了解这些主题。
让我们一步一步来,从日期开始:
29/01/2022 -- Day, Month, Year.
鉴于以下情况:
unsigned int day = 0u;
std::cin >> day;
整数的输入跳过空格,直到第一个数字字符(对于第一个数字字符,还包括'+'和'-')。提取运算符不断读取字符,构建数字,直到达到 non-numeric 个字符:
2 --> 一天。
9 --> 天。
下一个字符是“/”,它不是数字字符,因此提取运算符 returns 数字 29
。
此上下文中的字符“/”称为定界符,因为它将日期字段与月份字段分开。
既然是字符,就得用字符变量读取:
char delimiter = '[=12=]';
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
转换为整数变量。
好的,所以我在 Whosebug 上四处寻找,偶然发现了一种通过定界符拆分 C++ 的方法。
目前看了这些,还是没看懂
- Parse (split) a string in C++ using string delimiter (standard C++)
- https://www.oreilly.com/library/view/c-cookbook/0596007612/ch04s07.html
- C++ spliting string by delimiters and keeping the delimiters in result
根据我的理解,我需要使用分隔符,使用包含分隔符的变量,然后使用 substr()
method/function,但我不明白整个事情。
例如,我看到一个例子,其中引用了 pos
和 npos
,我不明白。我的另一个问题是,我不知道如何使用具有相同定界符的多个副本的字符串来做到这一点。
我的目标是采用这样的日期:"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;
}
有人能用更简单的方式向我解释一下,或者给我一个更容易解释的来源吗?我的主要问题是某些单词听不懂。
感谢任何帮助,我真的很想学习,但我还不太了解这些主题。
让我们一步一步来,从日期开始:
29/01/2022 -- Day, Month, Year.
鉴于以下情况:
unsigned int day = 0u;
std::cin >> day;
整数的输入跳过空格,直到第一个数字字符(对于第一个数字字符,还包括'+'和'-')。提取运算符不断读取字符,构建数字,直到达到 non-numeric 个字符:
2 --> 一天。 9 --> 天。
下一个字符是“/”,它不是数字字符,因此提取运算符 returns 数字 29
。
此上下文中的字符“/”称为定界符,因为它将日期字段与月份字段分开。
既然是字符,就得用字符变量读取:
char delimiter = '[=12=]';
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
转换为整数变量。