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!
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie wollen, um die tokenisierung der string anstelle der Implementierung Ihrer eigenen Algorithmus, und fügen Sie die Teile zu Ihrem verlinkten Liste. Verwenden
strtok
(ref).Aus dem link oben.. Beispiel:
Ausgabe:
InformationsquelleAutor Mario Aguilera
Bessere Lösung für ANSI-C.
Nutzung strtok() es ist nicht immer gut:
Nächsten versuchen, und Lesen Sie die Kommentare für details:
Kompilieren und das Ergebnis sehen:
InformationsquelleAutor Seti Volkylany