怎样用sscanf正则表达式将"2023-02-07 03:57:44"字符串转换为UTC格式
时间: 2023-02-19 16:57:30 浏览: 65
可以使用以下代码将字符串转换为UTC格式:
struct tm tm;
sscanf("2023-02-07 03:57:44", "%d-%d-%d %d:%d:%d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
time_t utc = mktime(&tm) - timezone;
相关问题
请用sscanf函数对字符串2023-05-18.08:22:39进行分割
可以使用sscanf函数和格式化字符串来对字符串进行分割,具体代码如下:
```c
#include <stdio.h>
int main() {
char str[] = "2023-05-18.08:22:39";
int year, month, day, hour, minute, second;
sscanf(str, "%d-%d-%d.%d:%d:%d", &year, &month, &day, &hour, &minute, &second);
printf("Year: %d\n", year);
printf("Month: %d\n", month);
printf("Day: %d\n", day);
printf("Hour: %d\n", hour);
printf("Minute: %d\n", minute);
printf("Second: %d\n", second);
return 0;
}
```
输出结果为:
```
Year: 2023
Month: 5
Day: 18
Hour: 8
Minute: 22
Second: 39
```
其中,`sscanf(str, "%d-%d-%d.%d:%d:%d", &year, &month, &day, &hour, &minute, &second)` 表示按照指定格式从字符串中读取数据,并将读取的数据存储到对应的变量中。`%d` 表示读取整数,`-`、`.`、`:` 表示在字符串中的位置。
sscanf 用正则表达式截取字符串
sscanf 函数可以使用格式化字符串来解析字符串,但它不支持正则表达式。如果要使用正则表达式来截取字符串,可以考虑使用正则表达式库,比如 PCRE 或 Boost.Regex。
以下是使用 Boost.Regex 库来截取字符串的示例代码:
```cpp
#include <boost/regex.hpp>
#include <string>
#include <iostream>
int main()
{
std::string input = "Hello, world! This is a test.";
boost::regex expr("\\w+"); // 正则表达式:匹配一个或多个单词字符
boost::sregex_iterator it(input.begin(), input.end(), expr);
boost::sregex_iterator end;
while (it != end) {
std::cout << it->str() << std::endl;
++it;
}
return 0;
}
```
输出结果为:
```
Hello
world
This
is
a
test
```
这里使用了 boost::regex 类来表示正则表达式,用它的构造函数来初始化一个正则表达式对象。然后使用 boost::sregex_iterator 类来迭代匹配结果,它的三个参数分别是输入字符串的起始位置、结束位置和正则表达式对象。在迭代过程中,可以通过 ->str() 方法获取匹配到的字符串。