C - extrahieren Wörter aus string

Ich bin ziemlich neu in C und daher die Begegnung einiges an Verwirrung mit der Verwendung von Zeigern.

Ich versuche zu extrahieren Wörter aus einer Zeichenfolge von ASCII-Zeichen.
Zum Beispiel, wenn ich die Zeichenfolge @@ - Hallo Welt..>> möchte ich, um die Worte "Hallo" und "Welt" aus der Zeichenfolge, und fügen Sie Sie zu meiner Link-Liste.

Ein Wort ist definiert als eine Folge von Buchstaben, und jedes Wort wird auf höchstens 64 bytes. Auch, alle Zeichen, wo die Funktion isspace() gibt einen nicht-null-Werte als Leerzeichen.

Im Grunde bin ich das Scannen in die strings aus einer Datei mit fscanf, dann für jeden string aufrufen meiner Funktion read_words(char *s) um die ordnungsgemäße Wörter aus dem string und fügen Sie Sie zu meiner verlinkten Liste für den weiteren Gebrauch.

Hier ist mein code scheint zu sein, werfen einen Fehler, der zu tun hat mit einem Zeiger.

struct node {
    char *val;
    struct node *next;
    int count;
} *words = NULL;


void read_words(char *s)
{
    struct node *tmp;
    char word[64+1];
    int i, check, wordStarted = 0, count = 0;

    for (i = 0; s[i] != '\0'; i++)
    {
            if ((isspace(s[i]) != 0) || !isalpha(s[i]))
            {
                    if (wordStarted == 1)
                    {
                            check = check_list(word);
                            if (check != 1) {
                                    word[count] = '\0';
                                    tmp = malloc(sizeof(struct node));
                                    tmp->val = word;
                                    tmp->count = 1;
                                    tmp->next = words;
                                    words = tmp;
                            }
                            count = 0;
                            wordStarted = 0;
                    }
            }
            else
            {
                    word[count++] = s[i];
                    wordStarted = 1;
            }
    }

}

Jede Hilfe bei diesem würde sehr geschätzt!

Danke!

Versuchen strtok. Es spaltet einen string in mehrere Teile, basierend auf einer beliebigen Anzahl von splitting-Zeichen.
Haben Sie versucht, debug Ihren code?
bitte posten Sie Ihre check_list () - Implementierung
Auch, können Sie einfach sagen: if(isspace(s[i])) statt if(isspace(s[i]) != 0). Nichts Bezug auf Ihr problem ist aber, schreiben nur sauberer code 😉
wissen Sie, dass Ihr Algorithmus zu überschreiben tmp->val jeder folgenden iteration Recht? Verwenden strtok, malloc tmp->val, und strcpy dem token.

InformationsquelleAutor Shabu | 2012-03-09

Schreibe einen Kommentar