Comment faire pour supprimer toutes les occurrences d'un caractère donné de chaîne en C?
Je suis d'essayer de supprimer un caractère à partir d'une chaîne de caractères en C. Le problème que j'ai avec mon code, c'est qu'il supprime la première occurrence du caractère de la chaîne mais aussi des lingettes de tout ce qui suit ce caractère dans la chaîne. Par exemple, en supprimant 'l' à partir de 'bonjour' impression de "il", plutôt que "heo'
int i;
char str1[30] = "Hello", *ptr1, c = 'l';
ptr1 = str1;
for (i=0; i<strlen(str1); i++)
{
if (*ptr1 == c) *ptr1 = 0;
printf("%c\n", *ptr1);
ptr1++;
}
J'ai besoin d'utiliser des pointeurs pour cette et souhaite le garder aussi simple que possible, car je suis un débutant en C.
Grâce
Astuce: lors de l'enlèvement, vous souhaitez décaler les autres lettres jusqu'à couvrir ceux que vous retirez.
Vous êtes également à l'aide d'une/de la boucle à l'adresse de l'index de chaque char, mais vous n'êtes jamais à l'aide de l'indice réel (Valeur de i)
Une autre chose à retenir, dans les CS, les chaînes sont null.
CS?
Double Possible de supprimer toutes les occurences d'un caractère dans la chaîne C - Exemple nécessaire
*ptr1 = 0;
n'est pas la façon de le faire.Vous êtes également à l'aide d'une/de la boucle à l'adresse de l'index de chaque char, mais vous n'êtes jamais à l'aide de l'indice réel (Valeur de i)
Une autre chose à retenir, dans les CS, les chaînes sont null.
CS?
Double Possible de supprimer toutes les occurences d'un caractère dans la chaîne C - Exemple nécessaire
OriginalL'auteur boutrosc | 2012-03-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire comme ceci:
L'idée est de garder un lire et écrire des pointeurs (
pr
pour la lecture et l'pw
pour l'écriture), toujours à l'avance le pointeur de lecture, et avance le pointeur d'écriture uniquement quand il n'est pas de pointage pour un caractère donné.Pourquoi melpon.org/wandbox/permlink/qZPdItEH7hjg4sl3 les résultats de segmentation fault ? Quelle est la différence entre
*pw=*ptr++;
et*pw=(*ptr)++;
incrémente le pointeur (correct), tandis que
(*ptr)++
incrémente le caractère (incorrect).OriginalL'auteur dasblinkenlight
Si vous supprimez les caractères en place, vous devrez déplacer le reste de la corde d'une position vers la gauche à chaque fois que vous supprimez un personnage, ce n'est pas très efficace. La meilleure façon est d'avoir un second tableau qui prend le filtrés de la chaîne. Par exemple, vous pouvez modifier votre code comme celui-ci.
strlen()
dans la condition d'une boucle comme ça, c'est une bonne réponse. Accordé, c'est une erreur hérité du code de la question, mais ...Leffler, cette réponse fait quelques erreurs fondamentales qui l'empêche d'être une bonne réponse. Vous n'avez pas à déplacer le reste de la chaîne à gauche à chaque fois qu'un caractère est supprimé. Cela impliquerait une boucle imbriquée, la réponse montre n'est pas nécessaire. Aussi, si vous copiez le caractère d'une chaîne à l'autre ne fait aucune différence, parce que c'est tout de même bloc de mémoire RAM. En effet, il est probablement plus efficace de l'utilisation d'une deuxième corde, parce que vous risquez d'avoir une cache à l'aide d'un lointain bloc de mémoire.
OriginalL'auteur AliA
OriginalL'auteur ristonj
Le problème est que lorsque vous rencontrez le premier caractère qui correspond à
c
, vous insérez un caractère nul. Cela signifie que vous êtes essentiellement de couper le reste de la chaîne.Ce que vous devez faire est lorsque vous trouver un correspondant de caractère, déplacez les caractères suivants en arrière d'une position. Ensuite, vous devez insérer le caractère nul à la fin en fonction du nombre de caractères que vous avez supprimé.
OriginalL'auteur Marlon
je sais que c'est un type de double réponse, mais ce code est fonction de la version de résoudre le problème. Je pense que l'interlocuteur était un débutant, il peut apprendre beaucoup de la version déclinée du problème.
OriginalL'auteur eightnoteight
il suffit de changer
à
@ouah dit, elle se casse le premier caractère NUL..
OriginalL'auteur tadeuzagallo
C définit une chaîne de caractères comme "une séquence contiguë de caractères terminée par la première caractère null"
OriginalL'auteur ouah