如何比较c ++中的java版本字符串?

时间:2016-08-12 09:52:36

标签: c++

假设我有这样的字符串(Java版本字符串): “1.8.0_101” “1.8.0_91”

有没有一种简单的方法可以确定c / c ++中哪个版本更高?

到目前为止我使用过strcmp()。它正确地比较了“1.7.0”和“1.8.0”等版本字符串,但是当涉及下划线字符时它不再起作用(因为下划线在ASCII表中的值比所有数字都高)

1 个答案:

答案 0 :(得分:1)

免责声明:这应该只是一个让您了解实施的示例。你的问题缺乏不同的观点,以使它成为一个好问题,无论如何我会尝试帮助并给你一个可运行的例子。代码可以改进并使其更健壮。

struct Version {
  int m_major;
  int m_minor;
  int m_release;
  int m_minor_release;

  Version() : m_major(-1),
              m_minor(-1),
              m_release(-1),
              m_minor_release(-1) { }

  // Convert a str to a version object
  explicit Version(const std::string& str_version) : Version() {
    size_t offset = 0;
    size_t finder;

    // Cycle until find a character as '.' '-' '_'
    while (finder = str_version.find_first_of(".-_", offset),
           finder != std::string::npos) {
      int* p = nullptr;
      if (m_major == -1) {
        p = &m_major;
      } else if (m_minor == -1) {
        p = &m_minor;
      } else if (m_release == -1) {
        p = &m_release;
      } else {
        p = &m_minor_release;
      }

      *p = std::stoi(str_version.substr(offset, finder - offset));
      offset = finder + 1;
   }

    if (offset != str_version.size() && m_minor_release == -1) {
      m_minor_release = std::stoi(
        str_version.substr(offset,std::string::npos));
    }
  }

  bool operator<(const Version& oth) const {
    // compare this version with another one
  }
};

我希望您能找到对您的问题实施有用的小例子。