Bonjour, en effet si les chiffres que tu veux récupérer sont toujours après le premier "_" de ta chaine de charactère tu peux chercher ce charactère dans ta chaine et copier tout ce qui suit dans une nouvelle chaine
Tu peux écrire une fonction qui prend un paramètre une référence constante vers une chaine de charactère, un char à chercher pour faire la séparation et qui retourne une nouvelle chaine de charactère que tu construis au fur et à mesure que tu lis la chaine d'entrée
Le chapitre sur les algorithmes un petit peu plus bas dans ce cours t'aidera à comprendre comment tu peux manipuler ces itérateurs sur des chaines de charactères ou des tableaux.
L'exercice "Couper une chaine" que tu trouveras en descendant un peu dans le lien que je t'ai donné répondra parfaitement à ton besoin si tu l'adaptes un petit peu
- Edité par ThibaultVnt 21 décembre 2020 à 16:56:03
if (messagereceived.contains("/serveurIp_"))
{
char const delimiteur { ' ' };
std::vector<std::string> parties {};
auto debut = std::begin(messagereceived);
auto fin = std::end(messagereceived);
auto iterateur = std::find(debut, fin, delimiteur);
while (iterateur != fin)
{
// Grâce à std::distance, nous obtenons la taille du mot.
std::string mot { debut, debut + std::distance(debut, iterateur) };
parties.push_back(mot);
// +1 pour sauter le délimiteur.
debut = iterateur + 1;
// Et on recommence.
iterateur = std::find(debut, fin, delimiteur);
}
// Ne pas oublier le dernier mot.
std::string mot { debut, debut + std::distance(debut, iterateur) };
parties.push_back(mot);
// On affiche pour vérifier.
for (std::string mot : parties)
{
ui->messagelist->append(mot);
}
}
le compilateur me ressort:
152: erreur : no viable conversion from 'std::string' (aka 'basic_string<char>') to 'const QString'
up pour jo_link_noir tu pourrais m'expliquer comment utiliser indexof et ce qui retourne exactement ?
Tu fais un split là (c'est a dire séparer ta chaine en plusieurs sous chaine). Si tu sais que tu as qu'un seul _ et que si tu ne veux que l'adresse IP, c'est inutile de faire tout ca. Fais juste un find sur _ puis prend que la fin.
Si messagereceived est un QString, tu peux aussi directement utiliser QString::split.
Tu peux aussi regarder du coté des string_view, c'est un cas d'utilisation.
Pour ton erreur, tu n'indiques pas la ligne qui produit l'erreur.
EDIT : jo t'a donné le lien vers la doc, tu as juste a lire et suivre le code d'exemple.
bonjour la ligne ou se produis l'erreur est la ligne 29.
pour reponse a gbdivers j'ai fait un QString::split voici mon code:
if (messagereceived.contains("/serveurIp_"))
{
auto parts = messagereceived.split(QLatin1Char('_'));
// parts: {"serveurIP","127.0.01"}
ui->messagelist->append(parts[2]);
}
On ne sait pas les modifications que tu as apportées. Et il y a des grandes chances que ton nouveau problème provienne d'une tout autre cause. Il faut utiliser le débuggeur et voir ce qu'il y a dans la "call stack" au moment où se produit la SIGSEGV
Ton deuxième problème n'a rien à voir avec ta question initiale (extraction d'une IP contenue dans un string). Tu ferais mieux de marquer ce sujet comme résolu et d'ouvrir une nouvelle question.
(Sinon, ce thread va vite se transformer en devblog)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
Discord NaN. Mon site.
En recherche d'emploi.