C Funktion ähnlich bzw. gleich PHP explode

S

Sir Auron

Routinier
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
 
hm.. ist das sowas wie strtok(3) ?

auf bald
oenone
 
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
 
Zuletzt bearbeitet:
Ich machs doch nicht so kompliziert wie ich dachte. Da reicht strtok. Aber danke.
 
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
 
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)
 

Ähnliche Themen

[PHP] Autologin-Funktion

[HowTo] TeamSpeak 2 - RC2 - Server (Deutsch/Englisch)

Zurück
Oben