如何比较C ++中的字符串?

时间:2012-03-20 10:55:05

标签: c++

checkFormat(string &s)
{

}

string s是一个表示日期的字符串。

我想比较字符串s,以确定它是否与“yyyy:mm :: dd”有关。

我该怎么办?

将char与char进行比较?如果字符串是“600:12:01”怎么办?

抱歉我的英语不好。

6 个答案:

答案 0 :(得分:4)

不要使用正则表达式。使用strptime(),用于解析时间字符串(因此名称为str p time,字符串 - >解析 - >时间)。正则表达式无法确定2013:2:29无效。

答案 1 :(得分:2)

以下是算法的一个想法:

  1. 检查长度是否为预期长度。这很快。
  2. 检查冒号是否在预期的位置。
  3. 检查前四个字符是否为数字。
  4. 检查中间两个字符是否为数字。
  5. 检查最后两个字符是否为数字。
  6. 如果任一测试失败,请返回false。如果您完成所有操作,请返回true

    当然,这不会验证值的范围。此外,你并没有真正“比较”,你正在“验证”。

答案 2 :(得分:1)

您可以使用Boost Regex检查字符串是否与您的模式匹配。

答案 3 :(得分:1)

这是正则表达式的工作。由于您使用的是C ++,Boost.Regex是一种选择。

答案 4 :(得分:0)

最简单的方法是将字符串切成年,月,日的组成部分并进行比较。

See here to split strings by delimiter.

答案 5 :(得分:0)

您的编译器是否支持正则表达式,即您是否使用了符合C ++ 11标准的编译器?这将使任务更多更容易......否则您可能想诉诸Boost.Regex

假设您可以使用C ++ 11,以下代码应该执行您想要的操作(尽管未经测试):

std::regex rx("\\d{4}:\\d{2}:\\d{2}");
return regex_match(s.begin(), s.end(), rx);

John Cook撰写了an introduction into C++ regular expressions。如果您的编译器支持C ++ 11,只需将每个std::tr1替换为std