Verwendung von strtok
-
Hallo zusammen ich hab mal eine Frage unzwar soll ich folgende Aufgabe lösen
Schreiben Sie ein C-Programm, welches den
Text einer Kopfzeile von C-Funktionen analysiert.
Der Text der Kopfzeile soll als Zeichenkette eingegeben werden und untersucht werden. Als Ergebnis soll das Programm
den Namen der Funktion, die Zahl der Parameter und die Parameternamen
bestimmen.
Beispiel:
Für den Funktionsaufruf funk(a1,b1,u) soll folgende Ausgabe erzeugt werden:
Name der Funktion: funk
1.Parameter: a1
2.Parameter: b1
3.Parameter: u
Zahl der Parameter: 3
Hinweis:
Da die Funktion scanf als Datentrennzeichen das Leerzeichen verwendet, eignet sich diese Funktion nicht zum Eingeben von Zeichenketten, welche auch Leerzeichen enthalten dürfen. Deshalb soll die Funktion gets
verwendet werden, die eine Eingabezeile in eine Zeichenkette schreibt.Weiß nur das eine strtok funktion ungefähr so aussehen soll
#include <stdio.h>
#include <string.h>int main ()
{
char str[] ="Test(a,b,c).";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}Leider bin ich immer noch nicht wirklich clever in Programmierung.
Kann mir wer helfen??
MfG
-
#include <stdio.h> #include <string.h> void removeWhiteSpace(char *s){ char *p = s; while(*p){ if(*p == ' '){ p++; }else{ *s++ = *p++; } } *s=0; } int main(void) { char str[] = "funk( a1 ,b 1, u)"; removeWhiteSpace(str); char *func; int count = 1; //extract function name func = strtok(str,"("); printf("Name der Function: %s\n",func); while(func){ func = strtok(NULL,")"); } //extract params func = str+strlen(str)+1; func = strtok(func,","); while(func){ printf("%d.Parameter: %s\n",count++,func); func = strtok(NULL,","); } return 0; }
versuchs mal damit
lg lolo
-
noobLolo schrieb:
char str[] = "funk( a1 ,b 1, u)";
leerräume in bezeichnern würde ich aber verbieten.
-
ja das sieht ja scho ganz gut aus aber ich muss den text frei wählen können.Also nicht zwangsweise funk(a1,b1,c1), sondern diese Fubktion selber eintippen.
So das der Ausgabetext ungefähr so aus sieht.funk(a1,b1,c1)
Name der Funktion: funk
1. Parameter: a1
2. Parameter: b1
3. Parameter: c1
Zahl der Parameter: 3
Drücken Sie eine beliebige Taste . . .MfG
-
eigentlich schaut das ganz miserabel aus, erstens das problem das ;fricky beschrieb, zweitens geht sowas nicht...
fn(a,fn(),b);
denke da braucht man dann schon fast einen parse tree wo man bei jeder '(' ein level rauf und bei ')' ein level runter geht und bei jedem ',' hängst an den aktuellen knoten ein child dran, dann erübrigt sich das auch mit den whitespace, wenn du am ende die bezeichner durch eine trim() function schickst, evtl. gehts auch recurisv aber da fällt mir jetzt spontan nix ein
für dein problem mit der eingabe wirfst mal da nen blick rein
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/lg lolo
-
hmm...das natürlich nicht so toll, weil der Prof meinte mit str tok gehts wohl sau einfach. und wenn man nur den text funk(a1,b1,c1) eintippen muss also ein Programm speziell für diese Fubktion? geht das denn irgendwie ohne ein kompliziertes Programm zu schreiben???
-
hm? du hast aber schon mal deinen compiler angeworfen und dich zumindest um die eingabe gekümmert?
-
Nein ich hatte noch nichts getan weil ich leicht überfordert bin mit dieser Aufgabe.
-
hast schon mal nen blick in den link geworfen? die datei die du verwenden mußt heißt "stdin" die brauchst nicht öffnen sondern kannst sie sofort verwenden, schließen fällt also auch flach
lg lolo