Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Vergleich von Versionsnummern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.08.2004, 20:50 Uhr
DKL



Hallo,

mir liegen 2 Versionsnummern einer Software vor:
Version 1.1.2
Version 1.10.2

Ich möchte diese Nummern vergleichen und die höhere (1.10.2) ermitteln.
Weiß jemand wie man dies am besten anstellen kann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.08.2004, 20:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


string zerteilen und dann die einzelnen zahlen vergleichen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.08.2004, 21:13 Uhr
Pablo
Supertux
(Operator)


Vor allem kennst du das Format.


C++:

...
int x1,y1,z1,x2,y2,z2;
int c=-1; /* c==0 heißt ver1 < ver2, c==1 heißt ver2<ver1, c==-1 ver1==ver2 */
char ver1[] = "1.1.2";
char ver2[] = "1.10.2";

sscanf(ver1, "%d.%d.%d", &x1, &y1, &z1);
sscanf(ver2, "%d.%d.%d", &x2, &y2, &z2);

if (x1==x2)
{
    /* nun müssen wir die zweite Zahl überprüfen */
   if (y1==y2)
   {
        /* nun müssen wir die dritte Zahl überprüfen */
        if(z1==z2)
            c=-1;
            else if (z1 < z2)
                c=0;
            else
                c=1;
    } else if (y1 < y2)
        c = 0;
    else
        c = 1;
} else if (x1<x2)
    c = 0;
else
    c=1;

printf("Die Version \"%s\" ist ", ver1);

switch(c)
{
    case -1:
            printf("gleich wie ");
            break;
    case 0:
            printf("kleiner als ");
            break;
    case 1:
            printf("größer als ");
}

printf("die Version \"%s\"\n", ver2);
...



Ich hab sie aus dem Bauch heraus, hab sie nicht getestet
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 17.08.2004 um 21:14 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.08.2004, 21:16 Uhr
DKL



Vielen Dank für die schnelle Hilfe, dann werde ich heute doch noch fertig mit dem Programm und kann lecker Olympia gucken :o)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.08.2004, 00:00 Uhr
(un)wissender
Niveauwart


Das ist wohl mehr eine cpp-lösung, aber vielleicht hilft es ja.


C++:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>

bool is_smaller_or_equal(const std::string verNumOne, const std::string &verNumTwo)
{
    //Lokale Kopie.
    std::string one = verNumOne, two = verNumTwo;
    
    //Punkte ersetzen, der std::stringstream komt damit nicht klar.
    std::replace(one.begin(), one.end(), '.', ' ');
    std::replace(two.begin(), two.end(), '.', ' ');
    
    //Einlesen.
    std::stringstream formaterOne, formaterTwo;
    formaterOne << one;
    formaterTwo << two;

    while(!formaterOne.eof() && !formaterTwo.eof())
    {
        //Nummer extrhieren.
        int numberOne, numberTwo;
        formaterOne >> numberOne;
        formaterTwo >> numberTwo;
    
        //Wenn gleich, weiter vergleichen.
        if(numberOne == numberTwo)
            continue;
        
        return numberOne < numberTwo;
    }

    //Sind gleich
    return true;
}

int main(int argc, char *argv[]) {    
    std::string test1 = "1.1.2";
    std::string test2 = "1.10.2";
    std::cout << is_smaller_or_equal(test1, test2) << std::endl;        
    return 0;
}

--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: