Het converteren van string naar int is een terugkerende taak in de programmeerwereld. Ondanks dat het een eenvoudige taak is, falen veel codeerders daarbij of raken ze in de war. Conversie wordt meestal gedaan zodat we bewerkingen kunnen uitvoeren op getallen die als tekenreeksen zijn opgeslagen.
Voorbeeld:
str=163″
aantal=163
C is een sterk getypeerde taal. We krijgen een foutmelding als we proberen een waarde in te voeren die niet acceptabel is voor het gegevenstype. Niet alleen bij invoer, maar we krijgen ook een foutmelding tijdens het uitvoeren van bewerkingen.
Er zijn 3 methoden om een string naar int te converteren, namelijk:
- Atoi( ) gebruiken Loops gebruiken sscanf() gebruiken
1. Tekenreeksconversie met atoi( )
De functie atoi() in C neemt een tekenarray of letterlijke tekenreeks als argument en retourneert de waarde ervan in an geheel getal . Het wordt gedefinieerd in de header-bestand.
Als je observeert slepen() iets dichterbij zul je ontdekken dat het staat voor:

Uitsplitsing van atoi() in eenvoudige bewoordingen
Voorbeeld:
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;> }> |
>
>Uitvoer
atoi(141) is 141 atoi(3.14) is 3>
Atoi gedraagt zich iets anders voor string. Laten we eens kijken hoe:
Voorbeeld:
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;> }> |
>
>Uitvoer
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Uitleg:
- Geek 12345 hier is ‘Geek’ het eerste woord, dus het antwoord zal zijn: 0 (geen getal)
- 12345 Geek hier ‘12345’ is het eerste woord, dus het antwoord zal zijn: 12345
2. Loops gebruiken
We kunnen lussen gebruiken om een string naar een geheel getal te converteren door elk element van de string één voor één te doorlopen en de cijfertekens met hun ASCII-waarden te vergelijken om hun numerieke waarden te krijgen en wat wiskunde te gebruiken voor het genereren van het gehele getal. Het onderstaande voorbeeld laat zien hoe u dit moet doen.
Voorbeeld:
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;> }> |
>
>Uitvoer
4213>
Opmerking: we hebben str[i] – 48 gebruikt om de getaltekens naar hun numerieke waarden te converteren. Voor b.v. De ASCII-waarde van teken ‘5’ is 53, dus 53 – 48 = 5, wat de numerieke waarde is.
3. sscanf() gebruiken
We kunnen sscanf() gebruiken om een string eenvoudig naar een geheel getal te converteren. Deze functie leest de geformatteerde invoer van de string.
Syntaxis van sscanf:
pvr volledige vorm
int sscanf (const char * source, const char * formatted_string, ...);>
Parameters :
- bron – bronreeks. formatted_string – een tekenreeks die de formaatspecificaties . … : – lijst met variabele argumenten die het adres bevat van de variabelen waarin we invoergegevens willen opslaan.
Er moeten minstens evenveel van deze argumenten zijn als het aantal waarden dat is opgeslagen door de formaatspecificaties. Bij succes retourneert de functie het aantal ingevulde variabelen. In het geval van een invoerfout, voordat gegevens met succes kunnen worden gelezen, wordt EOF geretourneerd.
Voorbeeld:
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;> }> |
>
>Uitvoer
The value of x : 12345 The value of x : 12345.540039>
Kunnen we String naar int typen?
Het antwoord is NEE . Als we typecasting gebruiken om de string naar een getal te converteren, krijgen we een foutmelding zoals weergegeven in het onderstaande voorbeeld.
Voorbeeld:
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;> }> |
>
>
Uitgang:
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>
Uitleg: Als beide string en int bevinden zich niet in dezelfde objecthiërarchie , Wij kan geen impliciete of expliciete typecasting uitvoeren zoals we kunnen doen in het geval van een conversie van dubbel naar int of float naar int.
In de bovenstaande code kunnen we zien dat de uitvoer de waarschuwing geeft met een eventuele afvalwaarde erin. Om dergelijke omstandigheden te voorkomen, gebruiken we dus de hierboven gespecificeerde methoden.