Compare Version Numbers

Compare two version numbers version1 and version1.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.

You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

Here is an example of version numbers ordering:

0.1 < 1.1 < 1.2 < 13.37

C++实现代码:

#include<iostream>
#include<vector>
#include<string>
#include<sstream>
#include<cstdlib>
using namespace std;

class Solution {
public:
    int compareVersion(string version1, string version2) {
        istringstream is(version1);
        istringstream iss(version2);
        vector<string> vec1;
        vector<string> vec2;
        string tmp;
        while(getline(is,tmp,'.'))
        {
            vec1.push_back(tmp);
        }
        while(getline(iss,tmp,'.'))
        {
            vec2.push_back(tmp);
        }
        int len1=vec1.size();
        int len2=vec2.size();
        int i=0,j=0;
        while(i!=len1&&j!=len2)
        {
            if(atoi(vec1[i].c_str())<atoi(vec2[i].c_str()))
                return -1;
            else if(atoi(vec1[i].c_str())>atoi(vec2[i].c_str()))
                return 1;
            i++;
            j++;
        }
        if(i==len1&&j==len2)
            return 0;
        while(i!=len1)
        {
            if(atoi(vec1[i].c_str())!=0)
                return 1;
            i++;
        }
        while(j!=len2)
        {
            if(atoi(vec2[j].c_str())!=0)
                return -1;
            j++;
        }
        return 0;
    }
};

int main()
{
    string s1="01.23.0.0";
    string s2="01.23";
    Solution s;
    cout<<s.compareVersion(s1,s2)<<endl;
}

 

#include<iostream>
#include<string>
#include<cstring>
#include<cstdlib>
using namespace std;

class Solution
{
public:
    int compareVersion(string version1, string version2)
    {
        size_t  pos1=0;
        size_t  pos2=0;
        size_t index1;
        size_t index2;
        while(pos1<version1.size()&&pos2<version2.size())
        {
            index1=version1.find('.',pos1);
            index2=version2.find('.',pos2);
            if(index1==string::npos)
                index1=version1.size();
            if(index2==string::npos)
                index2=version2.size();
            if(atoi(version1.substr(pos1,index1-pos1).c_str())<atoi(version2.substr(pos2,index2-pos2).c_str()))
                return -1;
            else if(atoi(version1.substr(pos1,index1-pos1).c_str())>atoi(version2.substr(pos2,index2-pos2).c_str()))
                return 1;
            pos1=index1+1;
            pos2=index2+1;
        }
        while(pos1<version1.size())
        {
            index1=version1.find(pos1);
            if(index1==string::npos)
                index1=version1.size();
            if(atoi(version1.substr(pos1,index1-pos1).c_str())!=0)
                return 1;
            pos1=index1+1;
        }
        while(pos2<version2.size())
        {
            index2=version2.find(pos2);
            if(index2==string::npos)
                index2=version2.size();
            if(atoi(version2.substr(pos2,index2-pos2).c_str())!=0)
                return -1;
            pos2=index2+1;
        }
        return 0;
    }
};

int main()
{
    Solution s;
    cout<<s.compareVersion("","1.1")<<endl;
}

  

### Goroutines and Channel Output Comparison In the context of concurrent programming using Go language, goroutines provide an efficient way to execute functions concurrently. By prefixing a function call with `go`, this operation runs asynchronously in a separate goroutine without blocking the main program flow[^1]. When comparing outputs related to channels (`ch1`), consider how data flows between different parts of a program through these communication primitives. Channels allow safe sharing of values across multiple goroutines. #### Example Demonstrating Concurrent Execution Using Goroutines Below demonstrates sending messages over channel `ch1`. One version uses direct synchronous calls while another employs asynchronous execution via goroutines: ```go package main import ( "fmt" ) func sendDirect(ch chan int) { for i := 0; i < 5; i++ { ch <- i * 2 // Send even numbers directly into ch1 synchronously } close(ch) } func sendAsync(ch chan int) { go func() { // Run as goroutine for i := 0; i < 5; i++ { ch <- i * 3 // Send multiples of three into ch1 asynchronously } close(ch) }() } func main() { fmt.Println("Synchronous:") directCh := make(chan int) sendDirect(directCh) for v := range directCh { fmt.Printf("%d ", v) } fmt.Println("\nAsynchronous:") asyncCh := make(chan int) sendAsync(asyncCh) for v := range asyncCh { fmt.Printf("%d ", v) } } ``` This code snippet shows two methods for populating `ch1`: one performs operations sequentially within the same thread, whereas the other leverages concurrency by launching tasks inside independent lightweight threads known as goroutines.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值