y'a t il une fonction C qui remplace la fonction c++ string.replace? - C - Programmation
Marsh Posté le 10-06-2005 à 11:57:00
Non.
Mais l'algo est simple :
En faisant attention aux allocations mémoire qui vont bien.
Marsh Posté le 10-06-2005 à 11:59:20
c'est a dire que je n'ai pas de chaine a remplacer dans la chaine initiale.
je veux dire par ex j'ai une chaine avec 10 caracteres + 1\0
je voudrais me positionner au car 5 et virer les 5 qui suivent
voila ce que je veux dire
Marsh Posté le 10-06-2005 à 12:01:17
Tu mets le 6e caractère à '\0', ce qui "terminera" la chaîne plus tôt et ne conservera que les 5 premiers caractères
Marsh Posté le 10-06-2005 à 12:04:35
mais si tu veux pas le faire depuis le début il faut copier dans une autre chaine
Marsh Posté le 10-06-2005 à 12:07:04
il parait que les chaines littérales sont constantes, donc pas moyen de les changer.
pq ici on peut? ce sont pas des chaines littérales?
Marsh Posté le 10-06-2005 à 12:07:35
ritzle a écrit : mais si tu veux pas le faire depuis le début il faut copier dans une autre chaine |
Pour ne conserver qu'une partie d'une chaîne, où qu'elle soit, ce serait pas plus simple d'utiliser memmove() (+ utilisation du '\0' où il faut), que de passer par une chaîne temporaire ?
Rapport aux allocations mémoire qu'on n'aurait pas à gérer, du coup ?
Marsh Posté le 10-06-2005 à 12:08:45
fullnight a écrit : il parait que les chaines littérales sont constantes, donc pas moyen de les changer. |
Ben on sait pas, tu ne nous avais jamais dit qu'il s'agissait de constantes.
Par définition, une constante ben... c'est une constante, donc ça ne se modifie pas.
Là, pas d'autre choix que de passer par une chaîne temporaire.
Marsh Posté le 10-06-2005 à 12:10:50
j'ai parlé de chaine de caractere
donc genre char * chaine="bonjour";
c'est modifiable ca?
Marsh Posté le 10-06-2005 à 12:12:06
Elmoricq a écrit : Ben on sait pas, tu ne nous avais jamais dit qu'il s'agissait de constantes. |
char string[] = "salut !";
c'est pas une constante,
char *string = "salut !";
mais ca si
Marsh Posté le 10-06-2005 à 12:18:29
maintenant pour modifier char string[] = "salut !";
j voudrais enlever le l et le u
j fais quoi?
Marsh Posté le 10-06-2005 à 12:45:03
vous parlez tous de constante là, mais je vois aucun const devant vos déclarations de char* hein ! faudrait voir à être rigoureux jusqu'au bout
Marsh Posté le 10-06-2005 à 12:46:09
fullnight a écrit : maintenant pour modifier char string[] = "salut !"; |
tu créé un tableau de 6 caractères, tu parcours ton tableau string en recopiant les caractères un par un, sauf le l et le u. ne pas oublier le '\0' final
Marsh Posté le 10-06-2005 à 14:10:44
fullnight a écrit : cmt faire pour remplacr N éléments a partir d'un Ième dans une chaine de caracteres en C |
Si la chaine est modifiable, memcpy().
Marsh Posté le 10-06-2005 à 14:12:28
fullnight a écrit : je veux dire par ex j'ai une chaine avec 10 caracteres + 1\0 |
Si la chaine est modifiable :
|
Marsh Posté le 10-06-2005 à 14:15:08
fullnight a écrit : il parait que les chaines littérales sont constantes, donc pas moyen de les changer. |
Tu n'a pas précisé la nature de la chaine originale.
|
Marsh Posté le 10-06-2005 à 14:28:44
fullnight a écrit : j'ai parlé de chaine de caractere |
Non.
|
est modifiable.
Marsh Posté le 11-06-2005 à 08:33:48
Question : le compilo bronche ou pas, si on tente de modifier char *s ="hello" ?
Si on met const devant, je suuis sûr que oui, mais sinon ?
Marsh Posté le 11-06-2005 à 09:47:08
el muchacho a écrit : Question : le compilo bronche ou pas, si on tente de modifier char *s ="hello" ? |
Non. C'est une faiblesse bien connue du C. Il est recommandé de définir les pointeurs sur chaines 'const'.
Marsh Posté le 11-06-2005 à 11:08:49
Déjà ça dépend de la machine, de la façon dont sont stocké les données, etc
Mais en plus considérons cette boucle :
for (;;) |
Que va-t'il afficher la 2e fois ? (si le compilateur l'accepte bien sûr)
Marsh Posté le 11-06-2005 à 11:22:55
Tarabiscote a écrit : Déjà ça dépend de la machine, de la façon dont sont stocké les données, etc
|
Crash...
Marsh Posté le 11-06-2005 à 11:26:59
Voilà, c'est ce que je voulais dire, le résultat est totalement imprévisible, ca peut aller de "ça a l'air de marcher" à "ça crash completement".
Marsh Posté le 10-06-2005 à 11:50:42
y'a t il une fonction en C qui remplace la fonction C++ string.replace?
si non
cmt faire pour remplacr N éléments a partir d'un Ième dans une chaine de caracteres en C
Message édité par fullnight le 10-06-2005 à 11:52:10