Extrahiere substring von string



  • Ich habe ein kleines console programm das dir deine ip anzeigt und von der ip dann den host namen auflöst(reverse dns) und dir dann ip und host namen
    auf den screen druckt.
    ein example beispiel

    IP: 12.34.567.89
    Host Name: dslb-012-034-567-089.pools.myisp-ip.net
    

    nun möchte ich

    dslb-012-034-567-089.pools.myisp-ip.net
    

    zu

    dslb.pools.myisp-ip.net
    

    konvertieren oder ähnlichem.
    mein ziel ist es die nummern und das

    -
    

    zeichen vom host name string zu entfernen, weil meine ip ist eine dynamische ip und ändert sich jede 24 stunden
    automatisch.
    es sollte anfangen das erste

    -
    

    zeichen zu finden und von dort aus bis zum ersten

    .
    

    zeichen oder letzten nummer im host namen string und dann die
    unerwünschten zeichen entfernt und nur den gewünschten host name string ohne die ip nummern und die

    -
    

    zeichen anzeigen.
    ich benutze msvc++ als kompiler.

    wie würde ich das tun?

    jede hilfe und hinweise sind mehr als erwünscht.



  • Wenns immer in dem Format ist, einfach alle Zahlen und '-' entfernen, wenn sogar immer die führenden Nullen für die IP Blöcke < 100 da sind kannste sogar mit .substr(...) einfach einfach die Stelle entfernen.

    Wenn es dynamischer sein soll würd ich RegExps nehmen.



  • Hallo,

    Du kannst nach den Punkten suchen und dann den Zwischenraum entfernen bzw den Rest in einen neuen String kopieren.

    MFG winexec*



  • Danke winexec und thomas, ich konnte es mit hilfe von einem guten online freund lösen, sein tip war:
    #include <stdio.h>

    void main()
    {
    char host[]="dslb-012-034-567-089.pools.myisp-ip.net";

    printf("\n %s ", host);
    strcpy(strchr(host,'-'),strchr(host,'.'));
    printf("\n %s",host);

    }

    output:

    dslb-012-034-567-089.pools.myisp-ip.net
    dslb.pools.myisp-ip.net

    ich hab es dann modifiziert:
    char* cShortHost = host->h_name;
    strcpy(strchr(cShortHost, '-'), strchr(cShortHost, '.'));

    printf("\nShortHost Name: %s", cShortHost);



  • Schlechter Tip. Ignorieren wir mal, daß Zeugs wie printf und strcpy hier nicht hingehören (dies ist ein C++ Forum). Ignorieren wir auch, daß es

    int main()
    

    heißen muß.

    Was wir aber nicht ignorieren können ist, daß dein strcpy undefiniertes Verhalten zur Folge haben kann, wenn der Mittelteil, den du rausschneidest, kürzer ist als der Endteil des Strings (überlappende Strings).

    Ein weiteres Problem hast du bei einem fehlerhaften Eingabestring (der z.B. kein '.' oder '-' enthält). Das sollte auch abgefangen werden.



  • Wie bereits erwähnt wurde, solltest du in C++ auch C++-Elemente benutzen.
    Deine ganze Aufgabe würde ich mit C++ Strings lösen:

    http://www.cppreference.com/cppstring/index.html

    Die sind dann auch abgesichert, was den Speicher angeht.

    Du kannst zum Beispiel mit find() nach Zeichenketten suchen. Das liefert dir eine Poisition im String zurück. Mit der kannst du dann mittels substr() Substrings extrahieren, kopieren, oder was auch immer ...


Anmelden zum Antworten