Comment faire pour supprimer le caractère à un index donné à partir d'une chaîne en C?
Comment puis-je supprimer un caractère à partir d'une chaîne de caractères?
Si j'ai la chaîne "abcdef"
et je veux enlever "b"
comment dois-je faire?
Retrait de la première caractère est facile avec ce code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word[] = "abcdef";
char word2[10];
strcpy(word2,&word[1]);
printf("%s\n", word2);
return 0;
}
et
strncpy(word2,word,strlen(word)-1);
va me donner la corde sans la dernier caractère, mais je ne l'ai toujours pas trouver comment supprimer un char dans la milieu d'une chaîne.
- toutes les occurrences d'un caractère donné: stackoverflow.com/questions/4161822/...
Vous devez vous connecter pour publier un commentaire.
memmove
peut gérer des zones de chevauchement, je voudrais essayer quelque chose comme ça (pas testé, peut-être +-1 question)Avant:
"abcdef"
Après:
"abdef"
Essayez ceci :
Programme de Test:
Résultat:
Ma façon de supprimer tous les caractères spécifié:
De l'essayer . memmove sera le chevauche.
Testés.
Laid comme l'enfer
Vraiment surpris de voir que cela n'a pas été posté avant.
Assez simple et efficace.
strcpy
utilisememmove
sur la plupart des implémentations.La suite s'étend le problème un peu en retrait de la première chaîne de l'argument de n'importe quel caractère qui se produit dans le deuxième argument de la chaîne.
Ce code permet de supprimer tous les caractères que vous entrez à la chaîne
entrée
sortie
gets
, il a été complètement supprimé de C11 en raison de la vulnérabilité de saturation de la mémoire tampon. Vous devez utiliserfgets (str, SIZE, stdin)
à la place.Edit : mise à Jour du code
zstring_remove_chr()
selon la version la plus récente de la bibliothèque.À partir d'une sous licence BSD chaîne de traitement de la bibliothèque C, appelé zString.
https://github.com/fnoyanisi/zString
Fonction pour supprimer un caractère
Exemple D'Utilisation
Exemple De Sortie
Supposons que x est le "symbole" du personnage que vous souhaitez supprimer
mon idée était de diviser la chaîne en 2 parties:
1ère partie contenu de tous les caractères à partir de l'indice 0 jusqu'à (et y compris) la cible de la lettre "x".
2ème partie countains tous les caractères après x (non compris x)
Maintenant tout ce que vous avez à faire est de rejoindre les deux parties.
Utilisation
strcat()
pour concaténer des chaînes.Mais
strcat()
ne permet pas de chevauchement de sorte que vous auriez besoin de créer une nouvelle chaîne de tenir la sortie.La suite devrait le faire :
J'ai essayé avec
strncpy()
etsnprintf()
.Une autre solution, à l'aide de memmove() avec index() et sizeof():
buf[] contient maintenant "acdef"
Cela pourrait être l'un des plus rapides, si vous passez l'index:
C'est ce que vous cherchez peut-être, tandis que le compteur est à l'index.
c'est comment j'ai mis en œuvre la même en c++.
Un moyen pratique, simple et rapide pour se débarrasser de \0 est de copier la chaîne sans le dernier char (\0) avec l'aide de strncpy au lieu de strcpy: