[quote="J-M-L, post:2, topic:1159572"]
Essayez char * p = strchr(data.c_str(), 'r');
Pour un caractère c’est une simple apostrophe pas un guillemet qui est réservé aux cString ...[/quote]
L’inverse du langage Pascal ; je me plante toujours.
Mais guère mieux, ça me retourne le caractère lui-même !
Ah, je savais qu'il y avait une fonction bien mieux appropriée, mais je n'arrivais à mettre la main dessus.
J'utilise les "String", car les valeurs viennent d'un Serial.ReadString();
J'avais mis ça dans le setup(), mais comme je ne voyais rien, je l'ai mis dans la loop() en me disant que si j'avais raté l'affichage "une fois", j'avais plus de chance de ne pas le rater en répétition.
p est un pointeur sur un char
Serial.print lorsqu'on lui passe en argument un char* essaie d'afficher une c-string donc il affiche le caractère pointé par le pointeur et les suivants jusqu'à trouver un terminateur de chaine \0
Pour la seconde partie du programme, si tu actives
tu auras des messages qui t'indiqueront que tu fais des choses pas très claires
/tmp/.arduinoIDE-unsaved2023719-5114-18zwk8u.5a72/sketch_aug19a/sketch_aug19a.ino: In function 'void setup()':
/tmp/.arduinoIDE-unsaved2023719-5114-18zwk8u.5a72/sketch_aug19a/sketch_aug19a.ino:11:18: warning: invalid conversion from 'char*' to 'int' [-fpermissive]
int x = strchr(data.c_str(), 'r');
~~~~~~^~~~~~~~~~~~~~~~~~~
/tmp/.arduinoIDE-unsaved2023719-5114-18zwk8u.5a72/sketch_aug19a/sketch_aug19a.ino:13:25: warning: cast from 'int*' to 'char' loses precision [-fpermissive]
Serial.println(char(&x)); // Imprime un point d'interrogation dans un carré.
String data = "Pierre.";
void setup() {
Serial.begin(115200);
Serial.println(data);
char * p = strchr(data.c_str(), 'r');
if (p != nullptr) {
// la position à partir de l'indice 0 (premier caractère)
Serial.print("Le premier 'r' est à l'indice N° ");
Serial.println(p - data.c_str());
// le caractère précédent en utilisant le pointeur
if (p - data.c_str() > 0) {
Serial.print("Le caractère précédent est '");
Serial.print(*(p - sizeof(char)));
Serial.println("'");
} else Serial.println("pas de caractère précédent");
// le caractère suivant en utilisant le pointeur
if (p - data.c_str() < strlen(data.c_str())-1) {
Serial.print("Le caractère suivant est '");
Serial.print(*(p + sizeof(char)));
Serial.println("'");
} else Serial.println("pas de caractère suivant");
} else {
Serial.println("il n'y a pas de 'r'");
}
}
void loop() {}