La conversion d'une chaîne en entier est une tâche récurrente dans le monde de la programmation. Bien qu'il s'agisse d'une tâche simple, de nombreux codeurs échouent ou se perdent en effectuant cette tâche. La conversion est principalement effectuée afin que nous puissions effectuer des opérations sur des nombres stockés sous forme de chaînes.
Exemple:
str=163″
nombre=163
C est un langage fortement typé. Nous obtiendrons une erreur si nous essayons de saisir une valeur qui n’est pas acceptable avec le type de données. Pas seulement dans les entrées, mais nous obtiendrons une erreur lors de l'exécution des opérations.
Il existe 3 méthodes pour convertir une chaîne en int qui sont les suivantes :
- Utiliser atoi() Utiliser des boucles Utiliser sscanf()
1. Conversion de chaîne à l'aide de atoi( )
La fonction atoi() en C prend un tableau de caractères ou une chaîne littérale comme argument et renvoie sa valeur dans un entier . Il est défini dans le En tête de fichier.
Si vous observez remorquer() un peu plus près, vous découvrirez que cela signifie :

Répartition de atoi() en termes simples
Exemple:
C
// C program to demonstrate the> // functioning of the atoi() function> #include> #include> int> main()> {> >char>* str1 =>'141'>;> >char>* str2 =>'3.14'>;> > >// explicit type casting> >int> res1 =>atoi>(str1);> >// explicit type casting> >int> res2 =>atoi>(str2);> > >printf>(>'atoi(%s) is %d
'>, str1, res1);> >printf>(>'atoi(%s) is %d
'>, str2, res2);> > >return> 0;> }> |
>
>Sortir
concaténer la chaîne Java
atoi(141) is 141 atoi(3.14) is 3>
Atoi se comporte un peu différemment pour les chaînes. Voyons comment :
Exemple:
C
// C Program to implement> // Atoi function with char array> #include> #include> > int> main()> {> >char>* str1 =>'Geek 12345'>;> >char>* str2 =>'12345 Geek'>;> > >int> num1 =>atoi>(str1);> >int> num2 =>atoi>(str2);> > >printf>(>'%d is of '%s'
'>, num1, str1);> >printf>(>'%d is of '%s'
'>, num2, str2);> > >return> 0;> }> |
>
>Sortir
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Explication:
remplacer tout dans la chaîne java
- Geek 12345 ici « Geek » est le premier mot donc la réponse sera : 0 (Aucun numéro)
- 12345 Geek ici « 12345 » est le premier mot donc la réponse sera : 12345
2. Utiliser des boucles
Nous pouvons utiliser des boucles pour convertir une chaîne en entier en parcourant chaque élément de la chaîne un par un et en comparant les caractères numériques à leurs valeurs ASCII pour obtenir leurs valeurs numériques et en utilisant des mathématiques pour générer l'entier. L'exemple ci-dessous montre comment procéder.
Exemple:
C
// C Program to convert string> // into integer using for loop> #include> #include> > int> main()> {> >char>* str =>'4213'>;> >int> num = 0;> > >// converting string to number> >for> (>int> i = 0; str[i] !=>' '>; i++) {> >num = num * 10 + (str[i] - 48);> >}> > >// at this point num contains the converted number> >printf>(>'%d
'>, num);> >return> 0;> }> |
>
>Sortir
4213>
Remarque : Nous avons utilisé str[i] – 48 pour convertir le caractère numérique en leurs valeurs numériques. Par ex. La valeur ASCII du caractère « 5 » est 53, donc 53 – 48 = 5 qui est sa valeur numérique.
3. Utilisation de sscanf()
Nous pouvons utiliser sscanf() pour convertir facilement une chaîne en entier. Cette fonction lit l'entrée formatée à partir de la chaîne.
Syntaxe de sscanf :
int sscanf (const char * source, const char * formatted_string, ...);>
Paramètres :
- source – chaîne source. formatted_string – une chaîne qui contient le spécificateurs de format . … : – liste d’arguments de variable qui contient l’adresse des variables dans lesquelles nous souhaitons stocker les données d’entrée.
Il doit y avoir au moins autant de ces arguments que le nombre de valeurs stockées par les spécificateurs de format. En cas de succès, la fonction renvoie le nombre de variables remplies. En cas d'échec d'entrée, avant que les données puissent être lues avec succès, EOF est renvoyé.
Exemple:
C
// C program to demonstrate> // the working of SSCANF() to> // convert a string into a number> #include> > int> main()> {> >const> char>* str1 =>'12345'>;> >const> char>* str2 =>'12345.54'>;> >int> x;> > >// taking integer value using %d format specifier for> >// int> >sscanf>(str1,>'%d'>, &x);> >printf>(>'The value of x : %d
'>, x);> > >float> y;> >// taking float value using %f format specifier for> >// float> >sscanf>(str2,>'%f'>, &y);> >printf>(>'The value of x : %f
'>, y);> > >return> 0;> }> |
>
>Sortir
The value of x : 12345 The value of x : 12345.540039>
Pouvons-nous transtyper String en int ?
La réponse est NON . Si nous utilisons le transtypage pour convertir la chaîne en nombre, nous obtiendrons une erreur comme indiqué dans l'exemple ci-dessous.
Exemple:
C
// C Program to check the output> // of typecasting from string to integer> #include> > int> main()> {> >string str =>'8'>;> >int> num;> > >// Typecasting> >num = (>int>)str;> >return> 0;> }> |
>
liste de tableaux dans le tri Java
>
Sortir:
main.c: In function ‘main’: main.c:9:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 9 | num = (int)str; | ^ 1683652612>
Explication: Comme les deux string et int ne sont pas dans la même hiérarchie d'objets , nous ne peut pas effectuer de conversion de type implicite ou explicite comme nous pouvons le faire en cas de conversion double en int ou float en int.
Dans le code ci-dessus, nous pouvons voir que la sortie donne l'avertissement avec toute valeur inutile à l'intérieur. Ainsi, pour éviter de telles conditions, nous utilisons les méthodes spécifiées ci-dessus.