C Funktion ähnlich bzw. gleich PHP explode

Diskutiere C Funktion ähnlich bzw. gleich PHP explode im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Abend! Gibt es in C eine Standart Funktion, die ähnlich bzw. gleich der PHP Funktion explode ist? Ich hab schon versucht eine nachzuprogrammieren...

  1. #1 Sir Auron, 29.07.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Abend!
    Gibt es in C eine Standart Funktion, die ähnlich bzw. gleich der PHP Funktion explode ist? Ich hab schon versucht eine nachzuprogrammieren hab die PHP Sources 2-5 runtergeladen da nachgegukt bin aber bei PHP3 (dort tauch explode das erste Mal auf) nicht mehr durchgestiegen (zu viele aneinandergekette Header). Wenn es keine Std. Funktion gibt, wie müsste dann eine eigene aussehen?

    Danke
    Sir Auron
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    hm.. ist das sowas wie strtok(3) ?

    auf bald
    oenone
     
  4. #3 ExRevel, 30.07.2004
    Zuletzt bearbeitet: 30.07.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
    explode() zerteilt einen String anhand eines Trennzeichens schneller als split(), das es keine Suchmuster zulässt. Also es funktioniert schon so wie ein Tokenizer und kommt dem Prinzip von strtok sehr nahe, ist aber natürlich tausendmal komfortabler :) Ich hab einen Minitokenizer in C++ verfasst, der kommt explode() schon ein bissal näher. Wie toll er ist kann ich nun nicht sagen:
    Code:
    void split(vector<string> *list, char* buffer) {
    
    	string stringbuffer(buffer);
    
    	int n, m;
    
    	m = 0;
    	for (n = 0; n < strlen(buffer); n++)
    		if (buffer[n] == ';') 
    			m++;
    
    	int seperator[m];
    			
    	m= 0;
    	for (n =0; n < strlen(buffer); n++) {
    		if (buffer[n] == ';') {
    			seperator[m] = n;
    			m++;
    		}
    	}		
    
    	string first_element = stringbuffer.substr(0, seperator[0]);
    	list->push_back(first_element);
    
    	for (n = 0; n < m; n++) {
    	
    		int size;
    		size = seperator[n+1] - (seperator[n]+1);
    		string temp = stringbuffer.substr(seperator[n]+1, size);
    
    		list->push_back(temp);
    	}
    }
    
    Damit erhälst du einen Vector zurück den du benutzen kannst wie ein Array, in dem du die Teilstrings findest. Die Funktion teilt derzeit nach dem Semikolon auf, aber dies dynamisch zu gestallten sollte doch sehr leicht sein.

    ciao Exi
     
  5. #4 Sir Auron, 30.07.2004
    Sir Auron

    Sir Auron Routinier

    Dabei seit:
    26.04.2004
    Beiträge:
    482
    Zustimmungen:
    0
    Ich machs doch nicht so kompliziert wie ich dachte. Da reicht strtok. Aber danke.
     
  6. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    du solltest mit strtok aufpassen..

    1. du kannst strtok() nicht an mehreren stellen zur gleichen zeit benutzen (es benutzt einen static buffer)
    2. du kansnt strtok() nicht in einem multithreaded programm benutzen
    3. du kannst strtok() nicht in einer bibliothek benutzen, die in einem multithreaded programm verwendet werden soll
    4. strtok() veraendert die ursprungswerte, kann unerwuenschte seiteneffekte haben
    5. strtok() arbeitet zeilenbasiert, du brauchst also einen buffer so gross wie die laengste zeile. das kann zu speicherverschwendung fuehren.

    (sinngemaess uebersetzt, von "Thinking in C++", dort gibt es auch ein Codebeispiel fuer einen StreamTokenizer und einen generell einsetzbaren Tokenizer..)

    auf bald
    oenone
     
  7. etuli

    etuli Betrunken

    Dabei seit:
    12.04.2003
    Beiträge:
    278
    Zustimmungen:
    0
    Die manpage drueckt es aehnlich aus
    Code:
    BUGS
           Never use these functions. If you do, note that:
    
                  These functions modify their first argument.
    
                  The identity of the delimiting character is lost.
    
                  These functions cannot be used on constant strings.
    
                  The  strtok()  function  uses a static buffer while
                  parsing, so it's not thread safe. Use strtok_r() if
                  this matters to you.
    
    Andererseits koenntest du auch mal schauen, ob strsep nicht besser zu deinem Anforderungsprofil passt. Hat allerdings die selben Einschraenkungen wie strtok(). ;o)
     
Thema:

C Funktion ähnlich bzw. gleich PHP explode

Die Seite wird geladen...

C Funktion ähnlich bzw. gleich PHP explode - Ähnliche Themen

  1. Routing funktioniert nur für eine IP

    Routing funktioniert nur für eine IP: Hallo zusammen, ich habe ein sehr komisches Verhalten und kann mir das nicht erklären. Ich habe ein /28 Netz. Darin befinden sich Linuxsysteme...
  2. Warum funktioniert mein BASH - Dialog nicht ?

    Warum funktioniert mein BASH - Dialog nicht ?: Hallo, ich habe hier eine kleine Funktion in BASH geschrieben, die den Benutzer nach einer Lokalen IP Adresse Fragt, und diese dann angpingt....
  3. Xmoto Taste gedrückt halten funktioniert nicht unter Debian 10

    Xmoto Taste gedrückt halten funktioniert nicht unter Debian 10: Hab mir vor 2 Tagen Debian 10 installiert. Dazu wie immer auch das Spiel Xmoto, dessen Spieldaten ich von Debian 9 übertragen habe (und davor...
  4. Blender 2.80 mit neuer Oberfläche und neuen Funktionen

    Blender 2.80 mit neuer Oberfläche und neuen Funktionen: Nach fast zweijähriger Entwicklungszeit ist die freie 3D-Rendering-Software Blender in einer neuen Version erschienen. Blender 2.80 kommt unter...
  5. Framebuffer mit "Bild in Bild" Funktion ODER mehrere Bilder zu einem neuen (nurKonsole)

    Framebuffer mit "Bild in Bild" Funktion ODER mehrere Bilder zu einem neuen (nurKonsole): Moin Zusammen, ich habe einen Monitor mit Raspberry (an vielen Standorten) und wie immer - viel zu viel Informationen um diese gut lesbar...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden