Comment puis spliter un Sting ayant pour delimter une virgule

Bonjour à tous,

Un membre sympa m’avait proposer cette fonction pour spliter une chaine de caracter d’après la virgule

char machiane[0]="Salut,comment,vas,tu"
machiane[0]="Salut"
machaine[1]="comment"
etc...

voici la fonction qui fonctionne

void splitString(char *ligne, char **splitedString)
{
  
  char *p = ligne;
  
  int i = 0;
  splitedString[i++] = p;
  while (*p) {
   
    
    if (*p==',') {
      *p++ = '\0';
      if (i<NBVALS){
         splitedString[i++] = p;
      }
    } 
    else
    {
      p++;
    }
 
  }
  while(i<NBVALS){
    splitedString[i++] = p; 
  }
}

J’ai besoin de faire la même chose mais avec un String et j’ai du mal à comprendre comment adapter la function .

String mastrin="Salut,comment,vas,tu,"
splitedString[0]="Salut"
splitedString[1]="comment"
splitedString[2]="vas"
splitedString[3]="tu"

Ce qui serait bien c’est que la derniere virgule, après le tu, sois supprimée, ou pas considérée.

Dans la fonction que j’ai mis aussi, il attent un char *lignes

void splitString(char *ligne, char **splitedString)

Donc faudrait plusttôt avoir

void splitString(String ligne, char **splitedString)

mais après ca bug ici, évidement.

 char *p = ligne;

Il faudrait pouvoir parcourir char caracter du string. Es-ce qu’il y a une fonction qui le fait, comme on parcour un char avec un for?

Merci beaucoup

http://arduino.cc/en/Reference/StringCharAt http://arduino.cc/en/Reference/StringLastIndexOf http://arduino.cc/en/Reference/StringSubstring

et strtok(), dans la bibliothèque standard C

Bonjour,merci je vais regarder. J'ai deja regarder strtok() mais il ne prend que des char en parametre, pas de String, à moins que j'ai mal vu...

Oui mais bon les String ... y'a rien rien qu'on puisse faire avec qu'on ne puisse pas faire avec un tableau de char

Bonjour,

Voir mon message dans ton autre topic sur le même sujet ;)

Qu'est ce que tu vas faire des sous-chaine ? Les garder telles qu'elles ? Les convertir en un type natif (int, byte, etc..) ? Les tester et faire une action si besoin ?

En embarqué on garde le moins de chose possible en mémoire. Faire des découpages de string comme tu le ferais en java, python ou autre sur PC c'est de la folie en embarqué. Rappel toi bien que tu n'as que 2048 octets de RAM, pas 8Go comme sur un PC, et que la moindre allocation de String te faire perdre une place folle (en plus de te pourrir à petit feu ta RAM) ;)