Est-il possible d’écrire une fonction qui peut inverser une chaîne sans utiliser de chaîne tampon?

Dupliquer possible:
Comment inverser une chaîne en place dans c en utilisant des pointeurs?

La question de l’entrevue consistait à écrire une fonction appelée revstr qui peut prendre une chaîne et l’inverser sans utiliser de chaîne tampon, c’est-à-dire impliquant des pointeurs. Comment puis-je faire cela?

Itérez du début et de la fin simultanément, échangez des caractères.

 void revstr(char * str) { int right = strlen(str) - 1; int left = 0; while (left < right) { char c = str[right]; str[right] = str[left]; str[left] = c; ++left; --right; } } 

Vous pouvez éventuellement utiliser les astuces xor pour échanger sans caractère intermédiaire:

 str[right] ^= str[left]; str[left] ^= str[right]; str[right] ^= str[left]; 

C'est un moyen purement absurde de procéder à un échange. La seule raison d'utiliser cette construction est une exigence artificielle qui interdit de stocker des données de chaîne dans des variables intermédiaires et d'appeler des fonctions externes.

Je pense qu’au moins vous avez besoin d’une variable char pour effectuer une opération de swap. Vous pouvez utiliser quelque chose comme ça:

 char buf[SIZE]; int i ; char swap; for ( i = 0 ; i < SIZE / 2; i++){ swap = buf[i]; buf[i] = buf[SIZE - i]; buf[SIZE -i] = swap; }