Fractionner la chaîne en c

im essayant de scinder une chaîne en C (pas en C #, C ++ ou tout autre type). J’ai essayé d’utiliser la fonction de strtok, mais il s’avère que cela ne fonctionne que lorsque la limite entre chaque mot correspond à un seul caractère tel qu’un espace, un point-virgule ….

J’ai une variable qui est une chaîne qui contient du code HTML comme ceci:

  Index of /davidgoudet  
Apache mod_fcgid/2.3.6 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at turpialdevelopment.com Port 80

Et je veux avoir les morceaux entre les balises href telles que Horario, Oferta, Registro dans une variable, mais quand j’ai essayé d’utiliser strtok (chaîne, “href”), cela me donne un résultat étrange qui n’est pas celui que je cherche .

Des idées? Merci

strtok prend un tableau de caractères de tous les délimiteurs possibles et se scinde en fonction de l’un de ces caractères (dans votre cas, scission sur h , r , e ou f ), ce qui explique probablement pourquoi vous observez un comportement étrange.

Y a-t-il une raison pour laquelle vous n’utilisez pas une bibliothèque d’parsing HTML pour extraire les noms?

l’parsingur HTML libxml est très bon: http://www.xmlsoft.org/html/libxml-HTMLparser.html

Pourquoi n’utilisez-vous pas simplement un parsingur HTML approprié? lib2xml a un bel parsingur HTML en C.

C’est ma solution et j’espère que cela résoudra votre problème.

 int split(char ***dst, char *str, char spliter) { int str_num = 0; int each_size; int index = 0; int str_index = 0; int start_index = 0; while (str[index] != '\0') { if (str[index] == spliter) { str_num++; index++; while(str[index] == spliter) { index++; } } else { index++; } } str_num++; *dst = (char **) malloc((str_num + 1)*sizeof(char*)); index = 0; while (str[index] != '\0') { if (str[index] != spliter) { start_index = index; each_size = 0; while (str[index] != spliter && str[index] != '\0') { index++; each_size++; } (*dst)[str_index] = (char*) malloc((each_size + 1)*sizeof(char)); int cur_i = 0; while (start_index != index) { (*dst)[str_index][cur_i] = str[start_index]; start_index++; cur_i++; } (*dst)[str_index][cur_i] = '\0'; str_index++; } else { index++; } } (*dst)[str_num] = NULL; return str_num; } 

Essayez d’utiliser strstr (), puis de décaler le pointeur qui vous est renvoyé.

 strstr(big_ssortingng_of_tags,"href")+6; //Leaves pointer at the word you're seeking, read up until you see a double quote char. 

Ce n’est pas une solution très élégante, mais si vous êtes contraint à C seul, c’est peut-être un bon début.

Vous pouvez utiliser une fonction de comparaison de chaînes telle que strnstr() pour localiser des sous-chaînes, telles que les balises de début et de fin. Ensuite, vous pouvez facilement calculer la position et la longueur de la sous-chaîne souhaitée et utiliser strncpy() pour copier ces données.