C - l'extraction de mots à partir de la chaîne

Je suis assez nouveau dans C et donc de rencontrer un peu de confusion avec l'aide de pointeurs.

Je suis d'essayer d'extraire des mots à partir d'une chaîne de caractères ASCII.
Par exemple, si j'ai la chaîne @@Bonjour..monde>>, je veux obtenir les mots "Bonjour" et "monde" de la chaîne et de les ajouter à ma liste liée.

Un mot est défini comme une séquence de lettres, et chaque mot est à plus de 64 octets. Aussi, le caractère et la fonction isspace() renvoie une valeur non nulle est considérée comme un espace.

En gros, je suis la numérisation dans les chaînes de caractères à partir d'un fichier à l'aide de fscanf, ensuite, pour chaque chaîne de l'appel de ma fonction read_words(char *s) pour obtenir les mots appropriés de la chaîne et de les ajouter à ma liste liée pour une utilisation ultérieure.

Voici mon code qui semble être de lancer une erreur qui a à voir avec un pointeur.

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] != '
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;
}
}
}
'
; i++) { if ((isspace(s[i]) != 0) || !isalpha(s[i])) { if (wordStarted == 1) { check = check_list(word); if (check != 1) { word[count] = '
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;
}
}
}
'
; 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; } } }

Toute aide avec ce serait bien apprécié!

Merci!

  • Essayez strtok. Il divise une chaîne en pièces fondée sur un certain nombre de fractionnement des personnages.
  • Avez-vous essayé de debug de votre code?
  • merci de poster votre check_list() de la mise en œuvre
  • Aussi, vous pouvez juste dire if(isspace(s[i])) au lieu de if(isspace(s[i]) != 0). Rien à votre problème, juste l'écriture nettoyeur de code 😉
  • vous savez que votre algorithme est d'écraser les tmp->val chaque itération suivante de droite? Utilisation strtok, malloc tmp->val, et strcpy le jeton.
InformationsquelleAutor Shabu | 2012-03-09