Y a t il une fonction qui me permets de me récupérer tout ce qu'il y a apres l'espace, soit
+2209876789
et s'il y avait un espace apres le 9, il ne prend rien de plsu que jusqu'au 9?
En PHP, il y a la fonction explode() en passant comme delilioteur l'espace. Et il me place toutes les valeurs dans un array.
Peut on faire une truc du genre aussi, avec Arduino?
char inSerial[]="dirw4 rrrrrrr eee"
char nu[20];
for(int i=0; i<20; i--){
if(i > 4){ // Je commance à la position 5 (l'expace)
Serial.print(inSerial[i]); // J'affiche les caracter
strcat(nu,inSerial[i]); // Ca ca ne marche pas nom plus PORTANT c est deux char?
if(inSerial[i] == " " || inSerial[i] == "\0"){ // Des que je rencontre un espace, je sors de ma boucle, mais il n'accèpte pas la comparaison???
break;
}
}
}
Serial.println(nu); /Ca devrait afficher "rrrrrrrr"
tu peut t'en sortir en utilisant les fonctions strtok() ou sscanf(), ou une combinaison des deux.
La première fonction est vraiment tres chiante a utiliser
/****************************************************/
/* Exemple d'utilisation de strtok */
/* Découper une chaine selon un certain séparateur */
/****************************************************/
// dans le code suivant on découpe avec l'espace
// mais on peut remplacer l'espace en lignes 34 et 46
// par n'importe quel autre caractère
// ou même chaine de caractères
#include <stdio.h>
//#include <stdlib.h>
#include <string.h>
const int Taille = 200;
int main (void)
{
char phrase[Taille + 1] = "toto va a la plage"; // la chaine à découper
// on découpe selon les espaces
char tabMots[100][Taille + 1]={""}; // tabMots contient 100 mots vides
// un tableau d'au plus 100 chaines de taille maxi Taille
// il va nous servir à recevoir les mots de la chaine découpée
// à la fin du processus de découpage il aura l'allure suivante :
// toto
// va
// a
// la
// plage
char * p; // un pointeur interne qui va servir à la fonction de découpage
int i;
p=strtok(phrase," "); // p vaut le premier mot (toto)
strcpy(tabMots[0],p); // on copie toto dans la première ligne de tabMots
// le premier appel à strock va chercher le premier mot avant l'espace
// on copie ce mot (toto) dans le tableau tabMots en première ligne
// A la fin de l'instruction strtok a laissé en mémoire le pointeur p
// sur le début du mot suivant (va)
// Les appels suivants de strtok dans la boucle ci-dessous utilisent
// ce pointeur interne d'où la présence de NULL dans la ligne 46
i=1;
while (p!=NULL)
{
p=strtok(NULL," ");
// on cherche un nouveau mot à partir de la position courante
// de p
if (p!=NULL) // si on a trouvé un nouveau mot
{
strcpy(tabMots[i],p);
// on le copie dans le tableau en i ème ligne
i++; // on se prépare pour le mot suivant
}
} // fin de while
// affichage
for (i=0;i<100 && tabMots[i][0]!=0;i++) printf("\nMot %d : %s",i,tabMots[i]);
fflush(stdin);getchar();
} // fin de main
Pourquoi sortir les tanks (strtok et sscanf) pour si peu
Deux boucles et un pointeur suffit !
char test[] = "abc 123 def"; // La chaine de char d'origine
char *ptr = test; // Le pointeur vers le début de ta sous chaine (si elle existe)
// Avance le pointeur ptr jusqu'au premier espace, puis le saute
while(*ptr != ' ' && *ptr != '\0') ++ptr;
if (*ptr != '\0')
++ptr;
else
return; // Si fin de chaine = pas de sous chaine trouvé -> return
// Cherche l'espace suivant puis le remplace par un \0 (fin de chaine)
while(*ptr != ' ' && *ptr != '\0') ++ptr;
if (*ptr != '\0') *ptr = '\0';
// ptr pointe désormais sur le morceau "123"
J'ai détaillé, mais en réalité ça fait 4 lignes de code