Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1326 connectés 

  FORUM HardWare.fr
  Programmation
  C

  y'a t il une fonction C qui remplace la fonction c++ string.replace?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

y'a t il une fonction C qui remplace la fonction c++ string.replace?

n°1115513
fullnight
Posté le 10-06-2005 à 11:50:42  profilanswer
 

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
mood
Publicité
Posté le 10-06-2005 à 11:50:42  profilanswer
 

n°1115526
Elmoricq
Modérateur
Posté le 10-06-2005 à 11:57:00  profilanswer
 

Non.
 
Mais l'algo est simple :
 

  • Chercher la chaîne à remplacer dans la chaîne initiale (strstr() par exemple)
  • Copier tout ce qui est avant dans une nouvelle chaîne (strcpy() )
  • Ajouter à la nouvelle chaîne le remplacement (strcat() )
  • Copier tout ce qui suit la chaîne à remplacer dans la nouvelle chaîne (re strcat() )
  • Remplacer la chaîne initiale par la nouvelle chaîne


 
 
En faisant attention aux allocations mémoire qui vont bien.


Message édité par Elmoricq le 10-06-2005 à 11:57:17
n°1115531
fullnight
Posté le 10-06-2005 à 11:59:20  profilanswer
 

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

n°1115534
Elmoricq
Modérateur
Posté le 10-06-2005 à 12:01:17  profilanswer
 

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 ;)

n°1115542
ritzle
Posté le 10-06-2005 à 12:04:35  profilanswer
 

mais si tu veux pas le faire depuis le début il faut copier dans une autre chaine

n°1115545
fullnight
Posté le 10-06-2005 à 12:07:04  profilanswer
 

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?

n°1115546
Elmoricq
Modérateur
Posté le 10-06-2005 à 12:07:35  profilanswer
 

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 ?

n°1115548
Elmoricq
Modérateur
Posté le 10-06-2005 à 12:08:45  profilanswer
 

fullnight a écrit :

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?


 
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.

n°1115549
fullnight
Posté le 10-06-2005 à 12:10:50  profilanswer
 

j'ai parlé de chaine de caractere
 
donc genre char * chaine="bonjour";
 
c'est modifiable ca?

n°1115552
ritzle
Posté le 10-06-2005 à 12:12:06  profilanswer
 

Elmoricq a écrit :

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.


char string[] = "salut !";
c'est pas une constante,
char *string = "salut !";
mais ca si

mood
Publicité
Posté le 10-06-2005 à 12:12:06  profilanswer
 

n°1115553
fullnight
Posté le 10-06-2005 à 12:12:23  profilanswer
 

aahh ok !!
merci

n°1115558
fullnight
Posté le 10-06-2005 à 12:18:29  profilanswer
 

maintenant pour modifier char string[] = "salut !";  
 
j voudrais enlever le l et le u
j fais quoi?

n°1115602
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-06-2005 à 12:45:03  profilanswer
 

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 [:mlc]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1115606
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-06-2005 à 12:46:09  profilanswer
 

fullnight a écrit :

maintenant pour modifier char string[] = "salut !";  
 
j voudrais enlever le l et le u
j fais quoi?


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


Message édité par Harkonnen le 10-06-2005 à 12:46:32

---------------
J'ai un string dans l'array (Paris Hilton)
n°1115705
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2005 à 14:10:44  profilanswer
 

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().
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1115706
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2005 à 14:12:28  profilanswer
 

fullnight a écrit :

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


Si la chaine est modifiable :  


   s[5] = 0;



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1115716
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2005 à 14:15:08  profilanswer
 

fullnight a écrit :

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?


Tu n'a pas précisé la nature de la chaine originale.


/* pointeur sur chaine litterale : la chaine est non modifiable */
char *s = "hello";
/* ou mieux (evite les embrouilles) */
char const *s = "hello";
 
/* tableau de char initialise : le tableau est modifiable */
char s[] = "hello";


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1115748
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-06-2005 à 14:28:44  profilanswer
 

fullnight a écrit :

j'ai parlé de chaine de caractere
 
donc genre char * chaine="bonjour";
 
c'est modifiable ca?


Non.


char chaine[] = "bonjour";


est modifiable.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1116481
el muchach​o
Comfortably Numb
Posté le 11-06-2005 à 08:33:48  profilanswer
 

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 ?

n°1116491
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-06-2005 à 09:47:08  profilanswer
 

el muchacho a écrit :

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 ?


Non. C'est une faiblesse bien connue du C. Il est recommandé de définir les pointeurs sur chaines 'const'.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1116530
Tarabiscot​e
Posté le 11-06-2005 à 11:08:49  profilanswer
 

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 (;;)
{
  char *chaine = "salut\n";
  puts(chaine);
  chaine[2] = 0;
  ...
}


Que va-t'il afficher la 2e fois ? (si le compilateur l'accepte bien sûr)

n°1116538
Emmanuel D​elahaye
C is a sharp tool
Posté le 11-06-2005 à 11:22:55  profilanswer
 

Tarabiscote a écrit :

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 (;;)
{
  char *chaine = "salut\n";
  puts(chaine);
  chaine[2] = 0;
  ...
}


Que va-t'il afficher la 2e fois ? (si le compilateur l'accepte bien sûr)


Crash...
http://mapage.noos.fr/emdel/gif/crash.gif


Message édité par Emmanuel Delahaye le 11-06-2005 à 11:25:31

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1116542
Tarabiscot​e
Posté le 11-06-2005 à 11:26:59  profilanswer
 

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".

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  y'a t il une fonction C qui remplace la fonction c++ string.replace?

 

Sujets relatifs
Probleme avec fonction includeappeler une fonction javascript dans du php
aller chercher une fonction dans une autre feuille excelexecution de code par la fonction EVAL
Problème pour ajouter du texte après <body.> avec ereg_replace[RESOLU][C#] Création de packageensemble de fonction sans utiliser une classe?
[STL] fonction de comparaison et algosfonction eregi php
[ActionScript] fonction de temporisationAppel de fonction avec les touches directionnelles
Plus de sujets relatifs à : y'a t il une fonction C qui remplace la fonction c++ string.replace?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR