cstring-comparisonversion-numbering

comparing version numbers in c


I am seeing a lot of answers for this problem in other languages but I am trying to find out a way to compare 2 version numbers given as strings. For example

str1 = "141.1.23"
str2 = "141.1.22"

I am trying to find a way to compare the integer values in the strings to see which one is larger. (In this case str1 would be larger). I thought about using sometime of combination with atoi and strtok but I know I wont be able to tokenize 2 strings at once. Any advice?


Solution

  • I know I wont be able to tokenize 2 strings at once.

    Fortunately, you do not need to: make a function that takes a string, and parses it for three integer numbers using strtok_r (use a reentrant version, it's a lot safer).

    strunct version_t {
        int major;
        int minor;
        int build;
    };
    
    version_t parse_ver(const char* version_str) {
        version_t res;
        // Use strtok_r to split the string, and atoi to convert tokens to ints
        return res;
    }
    

    Now you can call parse_ver twice, get two version_t values, and compare them side-by-side.

    P.S. If you adopt a convention to always pad the numbers with leading zeros to a specific length, i.e. make sure that you write "141.1.03" and not "141.1.3", you could substitute integer comparison with lexicographic one.