1. Brève introduction

En langage C, la conversion entre entiers et chaînes dispose de fonctions d'extension largement utilisées (bibliothèque non standard), et vous pouvez également essayer des implémentations simples vous-même.


2. Conversion d'entier en chaîne

1. Fonction d'extension itoa

itoa (signifiant integer to alphanumeric) est une fonction qui convertit un entier en chaîne de caractères.

Dans l'environnement Windows, dans le fichier d'en-tête <stdlib.h> :

char* itoa(int value,char*string,int radix);//value: 要转换的整数,string: 转换后的字符串,radix: 转换进制数,如2,8,10,16 进制等。

Code source de la fonction :

char* itoa(int num,char* str,int radix) { char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//Table d'index unsigned unum;//Stocke la valeur absolue de l'entier à convertir, l'entier à convertir peut être négatif int i=0,j,k;//i est utilisé pour indiquer la position correspondante dans la chaîne. Après la conversion, i est en fait la longueur de la chaîne ; l'ordre après la conversion est inversé. Lorsqu'il y a un signe, k est utilisé pour indiquer la position de départ pour ajuster l'ordre ; j est utilisé pour échanger lors de l'ajustement de l'ordre. //Obtenir la valeur absolue de l'entier à convertir if(radix==10&&num<0)//Pour convertir en nombre décimal et il est négatif { unum=(unsigned)-num;//Affecte la valeur absolue de num à unum str[i++]='-';//Place '-' au début de la chaîne et incrémente l'index de 1 } else unum=(unsigned)num;//Si num est positif, affecter directement à unum //Partie conversion, noter que le résultat est en ordre inverse do { str[i++]=index[unum%(unsigned)radix];//Prendre le dernier chiffre de unum, le placer à la position correspondante de str, et incrémenter l'indice de 1 unum/=radix;//Retirer le dernier chiffre de unum }while(unum);//Sortir de la boucle jusqu'à ce que unum soit 0 str[i]='\0';//Ajouter le caractère '\0' à la fin de la chaîne, les chaînes C se terminent par '\0'. //Inverser l'ordre if(str[0]=='-') k=1;//S'il est négatif, le signe n'a pas besoin d'être ajusté, commencer l'ajustement après le signe else k=0;//Si ce n'est pas négatif, tout doit être ajusté char temp;//Variable temporaire, utilisée lors de l'échange de deux valeurs for(j=k;j<=(i-1)/2;j++)//Échanger symétriquement de la tête à la queue, i est en fait la longueur de la chaîne, l'indice maximal est la longueur moins 1 { temp=str[j];//Affecter la tête à la variable temporaire str[j]=str[i-1+k-j];//Affecter la queue à la tête str[i-1+k-j]=temp;//Affecter la valeur de la variable temporaire (en fait la valeur précédente de la tête) à la queue } return str;//Retourner la chaîne convertie }

Exemple de programme :

Exemple

#include <stdlib.h> #include <stdio.h> int main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; itoa(number1,string,10); printf("Nombre : %d, chaîne convertie : %s\n",number1,string); itoa(number2,string,10); printf("Nombre : %d, chaîne convertie : %s\n",number2,string); return 0; }

Capture d'écran du résultat :


2. Implémentation simple par vous-même

Code d'implémentation :

Exemple

#include <stdio.h> char* Int2String(int num,char *str);//Déclaration de fonction int main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; Int2String(number1,string); printf("Nombre : %d, chaîne convertie : %s\n",number1,string); Int2String(number2,string); printf("Nombre : %d, chaîne convertie : %s\n",number2,string); return 0; } char* Int2String(int num,char *str)//Décimal { int i = 0;//Indiquer le remplissage de str if(num<0)//Si num est négatif, rendre num positif { num = -num; str[i++] = '-'; } //Conversion do { str[i++] = num%10+48;//Prendre le chiffre le plus bas de num. Les codes ASCII des caractères 0~9 sont 48~57 ; en termes simples, nombre 0 + 48 = 48, le code ASCII correspond au caractère '0' num /= 10;//Supprimer le chiffre le plus bas }while(num);//Si num n'est pas 0, continuer la boucle str[i] = '\0'; //Déterminer la position de départ pour l'ajustement int j = 0; if(str[0]=='-')//S'il y a un signe moins, le signe moins n'a pas besoin d'être ajusté { j = 1;//Commencer l'ajustement à partir de la deuxième position ++i;//En raison du signe moins, l'axe de symétrie de l'échange doit aussi reculer de 1 position } //Échange symétrique for(;j<i/2;j++) { //Échange les valeurs aux deux extrémités de manière symétrique. En fait, cela économise la variable intermédiaire pour échanger a+b : a=a+b; b=a-b; a=a-b; str[j] = str[j] + str[i-1-j]; str[i-1-j] = str[j] - str[i-1-j]; str[j] = str[j] - str[i-1-j]; } return str;//Retourne la valeur convertie }

Capture d'écran du résultat :


3. Chaîne en entier

1. Fonction d'extension

atoi (signifiant alphanumérique vers entier) est une fonction qui convertit une chaîne en entier.

Sous environnement Windows, dans le fichier d'en-tête <stdlib.h>.

int atoi(const char *nptr); // Fonction de conversion d'une chaîne en entier, nptr : la chaîne à convertir

Code source de la fonction

int atoi(const char *nptr) { return (int)atol(nptr); } long atol(const char *nptr) { int c; /*Le caractère courant à convertir (convertir les caractères un par un en nombres)*/ long total; /*Résultat de conversion actuel*/ int sign; /*Indicateur si le résultat de conversion comporte un signe moins*/ /*Ignorer les espaces, les espaces ne sont pas convertis*/ while ( isspace((int)(unsigned char)*nptr) ) ++nptr; c = (int)(unsigned char)*nptr++;//Obtenir un caractère prêt pour la conversion sign = c; /*Enregistrer l'indicateur de signe*/ if (c == '-' || c == '+') c = (int)(unsigned char)*nptr++; /*Ignorer les signes '+' et '-', ne pas convertir*/ total = 0;//Mettre le résultat de conversion à 0 while (isdigit(c)) {//Si le caractère est un chiffre total = 10 * total + (c - '0'); /*//Convertir le caractère en chiffre correspondant selon le code ASCII, et multiplier par 10 pour l'accumuler au résultat*/ c = (int)(unsigned char)*nptr++; /*//Obtenir le caractère suivant*/ } //Retourner le résultat avec ou sans signe moins selon l'indicateur de signe if (sign == '-') return -total; else return total; }

Exemple de programme :

Exemple

#include<stdio.h> #include<stdlib.h> int main() { printf("String\"123456\"Convertir en nombre : %d\n",atoi("123456")); printf("String\"-123456\"Convertir en nombre : %d\n",atoi("-123456")); return 0; }

2. Implémentation simple par vous-même

Code source de l'implémentation :

Exemple

#include<stdio.h> int String2Int(char *str);//Déclaration de fonction int main() { printf("String\"123456\"Convertir en nombre : %d\n",String2Int("123456")); printf("String\"-123456\"Convertir en nombre : %d\n",String2Int("-123456")); return 0; } int String2Int(char *str)//Chaîne en nombre { char flag = '+';//Indique si le résultat a un signe long res = 0; if(*str=='-')//La chaîne comporte un signe moins { ++str;//Pointer vers le caractère suivant flag = '-';//Mettre l'indicateur à négatif } //Convertir caractère par caractère et accumuler dans le résultat res while(*str>=48 && *str<=57)//Convertir uniquement s'il s'agit d'un chiffre. Codes ASCII des chiffres 0~9 : 48~57 { res = 10*res+ *str++-48;//Le code ASCII du caractère '0' est 48, 48-48=0, ce qui donne exactement le chiffre 0 } if(flag == '-')//Gérer le cas d'un nombre négatif { res = -res; } return (int)res; }

Capture d'écran :


4. Utilisation de la fonction sprintf() et de la fonction sscanf()

Entier vers chaîne

Code de test :

Exemple

#include <stdio.h> char* Int2String(int num,char *str);//Déclaration de fonction int main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; Int2String(number1,string); printf("Nombre : %d, chaîne convertie : %s\n",number1,string); Int2String(number2,string); printf("Nombre : %d, chaîne convertie : %s\n",number2,string); return 0; } char* Int2String(int num,char *str) { sprintf(str, "%d", num); return str; }

Résultat de l'exécution:

Chaîne vers entier

Code de test :

Exemple

#include<stdio.h> int String2Int(char *str);//Déclaration de fonction int main() { printf("String\"123456\"Convertir en nombre : %d\n",String2Int("123456")); printf("String\"-123456\"Convertir en nombre : %d\n",String2Int("-123456")); return 0; } int String2Int(char *str)//Chaîne en nombre { char flag = '+';//Indique si le résultat a un signe long res = 0; if(*str=='-')//La chaîne comporte un signe moins { ++str;//Pointer vers le caractère suivant flag = '-';//Mettre l'indicateur à négatif } sscanf(str, "%ld", &res); if(flag == '-') { res = -res; } return (int)res; }

Résultat de l'exécution:


5. Annexe : table des codes ASCII (partielle)

Auteur : Genven_Liang

Article original : https://blog.csdn.net/nanfeibuyi/article/details/80811498