[c] bestimmte Zeichenfolgen aus String auslesen

Z

Zico

Lebende Foren Legende
Hi Leute

Sorry wenn es dazu schonmal ein Thema gab, aber die SUFU war bei mir nun relativ erfolglos, weil ich nicht genau weiss, was ich suchen soll.

Mein kleines Hobbyprogramm wird nun relativ anspruchsvoll (für meine Kenntnisse) und nun stoße ich an meine Grenzenbei folgender Sache:

Ich hae einen String, in welchem, ein Seitenverhältnis definiert wird.
Beispiel: aspect = 16zu7.5;
Nun würde ich gerne die 16 sowie 7.5 in getrennten Variablen speichern.

Wie ließe sich das für mich am besten lösen?
Vielleicht hilft es noch klar zu stellen, dass die länge der jeweiligen Zahlen so variabel wie möglich sein sollen. Also mit oder ohne Dezimalstelle, einstellig, zweistellig etc.
Zudem könnte es auch vorkommen, dass der Sting in Form von ZEICHENKETTE,ZAHL1,ZEICHENKETTE,ZAHL2 auftritt, quasi
aspect16zu7.5

Wenn mir nu jemand den Namen der Funktion nennen kann, die ich brauche, ist das schon genug für mich. Ok ein Beispiel (weil ich dabei immer am besten lerne) wäre auch sehr nett - aber definitv kein Muss.

Vielen Dank
zico
 
Zuletzt bearbeitet:
Einmal rekursiv durch den String laufen und die einzelnen Zeichen untersuchen, ob sie ein int oder ein '.' sind, sollte doch innerhalb eines for(i=0;i<=strlen(meinstring);i++) mit isdigit() problemlos moeglich sein. Einfach den Schleifenzaehler als Index fuer das aktuelle Zeichen im String nutzen.
Ist dann das vorherige Zeichen ein int oder ein '.', fasst du einfach die zusammengehoerigen Zeichen (Zahlen (+ '.' + Zahlen)) in einer Variable zusammen und je nachdem ob ein '.' drin ist oder nicht, wandelst du dann einfach mit atoi() oder strtof() die Werte um, falls du sie als int bzw. float brauchst.
Das Problem bei Strings mit variabler Laenge und variablem Vorkommen der gesuchten Zeichen(ketten). :) Sonst koenntest du ja einfach mit sscanf() arbeiten.
Alternativ arbeitest du einfach mit pcre. Damit kannst du Regexes in C nutzen.
 
Zuletzt bearbeitet:
sooolang schrieb:
for(i=0;i<=strlen(meinstring);i++)

sowas bitte nicht schreiben wenn dann sowas :

Code:
int sooolang = strlen(meinstring);
for(i=0;i<=sooolang i++)

ansonsten wird wie sooolang oben beschreiben hat jedesmal die funktion "strlen" aufgerufen.

gruß

zyon
 
Was rechenzeitmaessig nicht allzuviel ausmachen wuerde. *anmerk* Und solange der String nicht vom Benutzer definierbar ist, sehe ich auch sonst kein Problem damit, strlen() direkt in der Schleife zu nutzen.
 
theton schrieb:
Was rechenzeitmaessig nicht allzuviel ausmachen wuerde. *anmerk* Und solange der String nicht vom Benutzer definierbar ist, sehe ich auch sonst kein Problem damit, strlen() direkt in der Schleife zu nutzen.

Verschwender !:oldman
 
ein strtok() auf "zu" würde mir da spontan einfallen... und dann halt schön mit atof() hingehen und viel spass mit deinen verhältnissen *g*
 
Zurück
Oben