使用分隔符"/"标记字符串

tokenize string with delimiter "/"

本文关键字:字符串 分隔符      更新时间:2023-10-16

你好,我正面临一个问题,因为我不能想出一个方法,将一个字符串(它实际上是一个日期在这种形式日/月/年)作为参数,并标记它在一个矢量或数组。有人能帮帮忙吗?我知道有很多关于这个主题,但我找不到任何解决方案,不包括boost(我不想使用)。

如果要解析日期,明显的起始点是std::get_time:

struct tm t;
std::cin >> std::get_time(&t, "%d/%m/%Y");

这将结果放入struct tm而不是矢量。这样,您就可以访问一个月中的某一天(例如)作为t.tm_mday,而不是试图记住x[1]是天,x[2]是年(或其他)。

您还可以获得相当数量的其他例程,它们知道如何以这种格式操作日期/时间,以及可以将其转换为time_tmktime(为此提供了许多更有用的例程)。

试试这个:

string parsed,input="03/12/2016";
stringstream input_stringstream(input);
vector<string> date;
if(getline(input_stringstream,parsed,'/'))
{
     date.push_back(parsed);
}

解析由/分隔的每个日期字符,并将其放入向量

给你。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int main() 
{
    std::string s( "2016/8/2" );
    std::istringstream is( s );
    std::vector<std::string> v;
    v.reserve( 3 );
    for ( std::string s; std::getline( is, s, '/' ); )
        v.push_back( s );
    for ( const auto & s : v )
        std::cout << s << ' ';
    std::cout << std::endl;
    return 0;
}

程序输出为

2016 8 2