Stringanalyse (Aufteilen eines Strings in Substrings,...)
-
Hallo,
bin noch C Anfänger und hab wahrscheinlich einige gaaanz einfache Fragen an Euch:
Möchte einen String in unterstrings aufteilen.
Beispiel: "KJhKJH,8775,JHGHJGHJ,UHIUHIUH,IHGHG,2234"
Ich möchte nun den String an den Kommastellen aufteilen und die einzelnen Teilstrings abspeichern bzw. anschließend die Zahlenwerte in double`s umwandeln. Die Positionen an denen die Zahlen stehen sind immer gleich.
Desweiteren möchte ich die Substrings, die Namen enthalten mit Strings vergleichen. Beispielsweise möchte ich wissen, ob der erste Teilstring auch wirklich "KJhKJH" heißt oder ob es sich um "TESTTEST" handelt...Weil ich gerade so dabei bin: Was bedeutet eigentlich der "Doppelstern" ** ???
Dankeschön!!!!
-
Da sind ein paar Teilprobleme:
1. Wenn der String an die entsprechende Funktion uebergeben wird, weisst diese noch nicht wie viele Teilstrings vorhanden sein werden. Ich wuerde in diesem Falle ein fach eine Liste bauen:
typedef StringList { char *szData; StringList *pNext; }
Diese List wuerde ich als Rueckgabewert der Funktion nehmen; also folgende Funktion:
StringList *SeperateByCommata (const char *szIn, char cSeperator) /*eg Comma ','*/ { StringList *pReturn = NULL, *pCurrent = NULL; char *szHelp = NULL; int iLoop = 0, iLengthString, iStartSubString = 0, iEndSubstring = 0; if (szIn != NULL) { iLengthString = strlen (szIn); szHelp = (char *) calloc (sizeof (char), iLength + 1); if (szHelp == NULL) abort (); } else return NULL; while (iLoop <= iLengthString) { if ((szIn [iLoop] == cSeperator) || (szIn [iLoop] == '/0')) { strcpy (szHelp, &szIn [iStartSubString]); szHelp [iEndSubstring] = '/0'; if (pReturn == NULL) { pReturn = malloc (sizeof (StringList)); pCurrent = pReturn; } else pCurrent->pNext = malloc (sizeof (StringList)); if (pCurrent == NULL) abort (); pCurrent = pCurrent->pNext; pCurrent->szData = (char *) calloc (sizeof (char), iEndSubstring + 1); if (pCurrent->szData == NULL) abort (); strcpy (pCurrent->szData, szHelp); iEndSubstring = 0; iStartSubString = iLoop + 1; } else iEndSubstring++; iLoop; } if (pCurrent != NULL) pCurrent->pNext = NULL; if (szHelp != NULL) free (szHelp); return pReturn; }
Ich habe das noch NICHT getestet - aber so etwa so wuerde ich es machen (Edit dummer bug gefunden).
-
strtok probieren...
-
Stringaufteilen: hatten wir ja schon
String nach Double: atof()
Strings vergleichen: strcmp()@MBCS-CITP
Das mit der Liste ist zwar ein guter Vorschlage, aber ich fürchte für einen Anfänger noch ein wenig zu hoch.