强制字符串比另一个字符串大

时间:2014-01-18 07:57:12

标签: c++

假设我有一个包含日期月份值的字符串,例如(JAN,FEB,MAR,APR等)。如果我想强制字符串值“FEB”大于“JAN”,有没有办法做到这一点?我正在尝试排序日期,但目前有月值问题。我的日期是固定字符串,例如12NOV1990,11DEC1994等。

struct sortMapDaily: public std::binary_function <bool, std::string, std::string>
{


  bool operator() (const std::string& lhs, const std::string& rhs)
  {


      enum month
      {
          JAN,
          FEB,
          MAR,
          APR,
          MAY,
          JUN,
          JUL,
          AUG,
          SEP,
          OCT,
          NOV,
          DEC

      };




     if(lhs.substr(5,4) < rhs.substr(5,4))
     {
         return true;

     }
     else if (lhs.substr(5,4) == rhs.substr(5,4) && lhs.substr(2,3) < rhs.substr(2,3))
     {

         return true;
     }
     else if (lhs.substr(5,4) == rhs.substr(5,4) && lhs.substr(2,3) == rhs.substr(2,3) && lhs.substr(0,2) < rhs.substr(0,2))
     {
         return true;

     }
     else
     {
         return false;
     }


  }
};

2 个答案:

答案 0 :(得分:2)

你需要将JAN,FEB映射到一些值,正如 zero298 enum所建议的那样。

enum Months{JAN,FEB,MARCH};

cout<<JAN<<FEB<<MARCH;
  

输出:012

答案 1 :(得分:0)

你可以做的一种方法是创建一个来存储日期,并重载运算符。

另一种方法是将其存储为数字(枚举),并在需要时将其转换为字符串。

您还可以编写一个接受两个字符串的函数,并返回“更大”的字符串。

std::string funct(std::string first, std::string second){
    if(first == "DEC" || second == "DEC")
        return "DEC";
    if(first == "NOV" || second == "NOV")
        return "NOV";
    ...
}