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

How to compare java version strings in c++?

本文关键字:java 版本 字符串 比较 c++      更新时间:2023-10-16

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

是否有一种简单的方法来确定c/c++中哪个版本更高?

到目前为止,我已经使用了strcmp()。它可以正确地比较版本字符串,如"1.7.0"answers"1.8.0",但当涉及下划线字符时,它不再工作(因为下划线在ASCII表中比所有数字具有更高的值)

免责声明:这应该只是一个例子,给你一个实现的想法。你的问题缺少很多点,为了使它成为一个好问题,无论如何,我会尽力帮助你,给你一个可运行的例子。代码还可以改进,使其更健壮。

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
  }
};
我希望你能发现这个小例子对你的问题实现有用。