c supprime le premier caractère d’un tableau

J’ai une ficelle:

str1 = "abcabcabc"; 

Comment puis-je supprimer le premier caractère? J’aimerais que le résultat final soit:

 str1 = "bcabcabc"; 

Si vous avez un pointeur de caractère sur une chaîne telle que:

 char *s = "This is my ssortingng"; 

alors vous pouvez simplement faire s++ .

Si vous avez un tableau de caractères , la meilleure solution consiste peut-être également à indiquer un pointeur sur ce tableau:

 char s[] = "This is my ssortingng"; char *ps = s; 

alors vous pouvez faire ps++ et assurez-vous d’utiliser ps plutôt que s .

Si vous ne voulez pas avoir un pointeur séparé sur votre tableau, vous pouvez utiliser memmove pour copier les données:

 memmove (s, s+1, strlen (s+1) + 1); // or just strlen (s) 

bien qu’aucun d’entre eux ne fonctionne pour une chaîne initialement vide, vous devrez donc vérifier cela au préalable. Gardez également à l’esprit qu’il est déconseillé d’essayer de modifier les littéraux de chaîne de cette manière (ou de toute autre manière, vraiment) car cela n’est pas défini si cela est autorisé.

Une autre solution consiste simplement à coder une boucle:

 for (char *ps = s; *ps != '\0'; ps++) *ps = *(ps+1); *ps = '\0'; 

Cela fonctionnera pour toutes les chaînes, vides ou non.

Essayer:

 char str1[] = "abcabcabc"; char *pstr1; pstr1 = &(str1[1]); 

Mauvaise pratique, mais comme il est réservé sur la stack, cela ne devrait pas vous tuer. Maintenant, si vous nous avez montré votre code …


Vous pouvez utiliser strcpy :

 char str1[] = "abcabcabc"; char str2[sizeof(str1)-1]; if(strlen(str1) > 0) { strcpy(str2, &(str1[1])); } else { strcpy(str2, str1); } // str2 = "bcabcabc"; 

Pour C ++, vous utilisez simplement std :: ssortingng :: substr :

 std::ssortingng str1 = "abcabcabc"; std::ssortingng str2 = str1.substr(1, str1.length() - 1); // str2 = "bcabcabc"; 

Voici une façon de le faire:

 int index = 0; //index to cull memmove( &word[ index ] , &word[ index +1], strlen( word ) - index) ; 

Si tu voulais vraiment dire

 char str1 [] = "abcabcabc"; 

Alors la chose la plus facile est

 str1 = &str1[1]; 

Si vous souhaitez modifier les données réelles, vous devez simplement tout déplacer d’une position vers le haut. Vous pouvez utiliser une boucle pour cela ou memmove() . Une fonction récursive est excessive.

Si vous vouliez vraiment parler de C ++ et que vous utilisez l’object ssortingng, vous pouvez utiliser

 str1 = str1.substr(1); 

Pour autant que je sache, si vous êtes préoccupé par l’allocation de mémoire, vous devez copier (str1 + 1) dans une nouvelle chaîne pour laquelle vous allouez personnellement de la mémoire, puis libérez le premier pointeur. Le moyen le plus simple de le faire serait simplement d’incrémenter str1 avec str1 ++; Cela ferait pointer un caractère plus loin qu’avant et vous donnerait le résultat souhaité avec juste une ligne de code.

 #include  #include  main(){ char a[10]; int i; gets(a); for (i = 0; a[i] != '\0'; i++) { a[i] = a[i + 1]; } printf("\n"); puts(a); getch(); }