Strings manipulieren



  • @windalf

    Nein ist es nicht. Wie gesagt werden dann bibleotheken benutzt die nicht standard sind. Ich glaube aber dass es so einfacher zu lösen ist. Natürlich geht deine Lösung auch. Aber da ich vermute dass es sich eh in seinem Fall um code aus einer Netzwerkanwendung handelt, dachte ich er kann auch gleich die Funktionen benutzen.



  • @prolog
    jo deine lösung wollte ich auch erst vorschlagen aber ich dachte dann fallen hier sämtliche standardgläubige über mich her... mein lösung gefällt ihnen vielleicht nicht ist aber nach Ansi-standard 😃



  • Wenns dir hilft kann ich ja als Bibleothekengläubiger über deinen code herfallen.
    😃

    Nee hast ja recht. Naja soll er sich aussuchen.



  • Ich glaube ich habe euch schon verstanden. Momentan benutze den Algo von Windalf allerdings übergiebt er der Funktion ein char als Austauschwert ich habe allerdings nur einen int-Wert. Und nu muss ich den ja wieder in ein char Wert "casten". Allerdings kommt es dort zu fehlern 😞 beim übergang von 1-2 Ziffern.



  • du solltest ja auch sprintf verwenden...

    int zahl=255;
    char zahl_als_chararray[4];
    sprintf(zahl_als_chararray,"%d",zahl);
    


  • prolog schrieb:

    Wenns dir hilft kann ich ja als Bibleothekengläubiger über deinen code herfallen.
    😃

    Nee hast ja recht. Naja soll er sich aussuchen.

    Es heißt Bibliothek!

    got Deutsch?



  • Es geht doch vor allem um den letzten IP-Teil.
    Wie stehts damit?

    char ip[16]= "192.168.1.1";
    char ip_last[16];
    int last_segmet = 150;
    
    strcpy(ip_last, ip);
    sprintf(strrchr(ip_last, '.')+1, "%d", last_segmet);
    


  • @dumb
    Entschuldige vielmals. Muss ich jetz das Wort Bibliothek 100 mal an die Tafel schreiben ?



  • Vielen Dank ersmal!

    Ich hatte das genau so mit printf gelöst. Allerdings hat das nicht gefunzt bis ich char ip[1000] auf char ip[4] gestzt hatte??? Ist das vom Prinzip her nicht egal?

    Nun funzt aber allles 😃 😃



  • 😃 Scheinbar nicht sonst hätte es ja geklappt 😃



  • ups ich hab das gerade mal vernünfitg getestest... ist tatsächlich noch buggy... man muss ggf. das nullbyte am ende noch vernünftig verschieben...



  • @Taurin
    Das wäre auch meine Lösung gewesen, da es ja nur hieß, dass die letzte Stelle geändert werden muss. Nur sollte man da noch eine Abfrage einbauen, ob strrchr() auch was gefunden hat. Auf die Speicheradresse 0 bzw. 1 zu schreiben, kommt nicht gut ;).

    Ansonsten würde ich der Lösung von prolog nachgehen. Die IP-Adresse also zuerst in eine Zahl umwandeln (das geht auch mit ANSI-C @Windalf ;)) davon die gewünschte Stelle entfernen, die neue Zahl einfügen und wieder in das bekannte Stringformat formatieren.



  • es gibt eigentlich eine ganz einfach ANSI-C Lösung
    bin leider nicht selber drauf gekommen werd sie euch aber nicht vorenthalten
    da hab ich irgendwie erst den wald vor lauter bäumen nicht gesehen

    void replace_ip_part(int part,char*number,char ip[16]){
      int a[4];
      sscanf(ip,"%d.%d.%d.%d",a,a+1,a+2,a+3);
      a[part]=atoi(number);
      sprintf(ip,"%d.%d.%d.%d",*a,a[1],a[2],a[3]);
    }
    


  • Noch ein kleiner Verbesserungsvorschlag (+ Fehlerkorrektur):

    char *replace_ip_part(int part,int number,char *ip)
    {
       ...
       return(ip);
    }
    


  • AJ schrieb:

    @Taurin
    Nur sollte man da noch eine Abfrage einbauen, ob strrchr() auch was gefunden hat. Auf die Speicheradresse 0 bzw. 1 zu schreiben, kommt nicht gut ;).

    Das hängt ganz von der eigenen Riskiobereitschaft ab 😉 Wenn man sich *sicher* ist,
    dass man eine IP-Adresse im string hat, dann brauch man gar nicht testen...

    @Windalf

    Ob das scanf() so ne schöne Idee ist? Vielleicht liest man die IP ja auch aus
    irgendeiner config-Datei aus, statt sie von der Tastatur zu lesen.

    Zur allgemeinen Weiterbildung:

    www.cplusplus.com/ref (insbesondere der Teil zur <string.h>)



  • Ob das scanf() so ne schöne Idee ist? Vielleicht liest man die IP ja auch aus
    irgendeiner config-Datei aus, statt sie von der Tastatur zu lesen.

    versteh ich nicht wie du das meinst.. woher das gelsen wird ist doch egal muss nur in einem char-array eingelsen werden... ich bentutze ja nicht scanf um von der konsole zu lesen sondern sscanf um aus nem string zu lesen...



  • Asche auf mein Haupt. Ob es hilft, wenn ich mein Lesefehler auf die bescheidene
    Standard-Biblithek-Nomenklatur schiebe? 😉



  • Taurin schrieb:

    Asche auf mein Haupt. Ob es hilft, wenn ich mein Lesefehler auf die bescheidene
    Standard-Biblithek-Nomenklatur schiebe? 😉

    *gg* nein. Er darf dich nun steinigen. 😃



  • *duck*



  • [OT]
    Falsche Bärte zu verkaufen!
    [/OT]

    @Taurin
    Wenn es wirklich sicher ist, dann ja, aber kann man da wirklich sicher sein?? Außerdem kann das leicht zur Gewohnheit werden, dass man es weglässt und das wär dann wieder schlecht ;).


Anmelden zum Antworten