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.


Anmelden zum Antworten