微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C ++中拆分`char []`

如何解决在C ++中拆分`char []`

| 我有一个YYYYMMDDHHMMSS格式的ѭ0。 例如2011052504572 我想从此字符中检索年,月,日,时,分和秒。我怎么做? 注意:我不能使用任何第三方dll。 谢谢, 赛德     

解决方法

为此使用1ѭ。例,
  string date = \"20110524112233\";

  string year = date.substr(0,4);
  string month = date.substr(4,2);
  string day = date.substr(6,2);
  string hour = date.substr(8,2);
  string minute = date.substr(10,2);
  string second = date.substr(12,2);
    ,如果您使用的是STL,则只需将字符串放入std :: string并使用substr方法:
std::string dateTime=......;

std::string year=dateTime.substr(0,4);
std::string month=dateTime.substr(4,2);
// etc
// etc
    ,这取决于您要将值提取为文本还是将其转换为数字。要获得很多琴弦,可以使用
std::string
substr()
,如其他答案中所述。 如果要获取可以用来计算的数字,则一种方法是:
int year,month,day,hour,minute,second;

if (sscanf(input,\"%.4d%.2d%.2d%.2d%.2d%.2d\",&year,&month,&day,&hour,&minute,&second) == 6)
{
    // all 6 conversions worked... can use the values...

    int second_in_day = hour * 3600 + minute * 60 + second;
    ...
}
另一种方法是使用
strptime()
-如果您的系统具有它。它将字符串解析为分解时间结构:
struct tm tm;
strptime(input,\"%Y%m%d%H%M%S\",&tm);
// parsed values are in tm.tm_year,tm.tm_mon,tm.tm_mday,//                      tm.tm_hour,tm.tm_min,tm.tm_sec
// further,tm_wday has day of week,tm_yday has day in year
// i.e. it actually understands the date,not just chopping up numbers/text
注意:
sscanf()
strncpy()
是可从C ++调用的C函数,它们使用起来不如C ++特定功能(
std::string
std::istringstream
)安全,因为对数据的细微误解和错误不仅会导致错误的结果,但是程序崩溃了。因此,如果使用它们,请仔细阅读手册页。     ,使用
strncpy
...好吧,所以,如果这不是家庭作业,那么这是最好的方法。其他使用std :: string的人浪费资源:
static const char *yyyymmddhhmmss = \"20110526101559\";
char year[5] = { \'\\0\' };
char month[3] = { \'\\0\' };
char day[3] = { \'\\0\' };
char hour[3] = { \'\\0\' };
char minute[3] = { \'\\0\' };
char second[3] = { \'\\0\' };
strncpy(year,yyyymmddhhmmss,4);
strncpy(month,&yyyymmddhhmmss[4],2);
strncpy(day,&yyyymmddhhmmss[6],2);
strncpy(hour,&yyyymmddhhmmss[8],2);
strncpy(minute,&yyyymmddhhmmss[10],2);
strncpy(second,&yyyymmddhhmmss[12],2);
    ,由于您输入的格式为
char[]
(或
char*
- 这种使用,结果是一样的),最简单的解决方案是 可能使用两个迭代器构造函数来创建
std::string
每个字段的字符串,例如:
std::string year ( date,date + 4 );
std::string month( date + 4,date + 6 );
std::string day  ( date + 6,date + 8 );
//  ...
如果需要数值,可以使用
boost::lexical_cast
, 例如。:
int extractField( char const* string,int begin,int end )
{
    return boost::lexical_cast<int>(
            std::string( date + begin,date + end ) );
}

int year = extractField( date,4 );
int year = extractField( date,4,6 );
//  ...
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。