Att konvertera sträng till int är en återkommande uppgift i programmeringsvärlden. Trots att det är en enkel uppgift, misslyckas många kodare antingen eller blir förvirrade när de gör detta. Konvertering görs mestadels så att vi kan utföra operationer över tal som lagras som strängar.
Exempel:
str=163 tum
nummer=163
C är ett starkt skrivet språk. Vi får ett felmeddelande om vi försöker mata in ett värde som inte är acceptabelt med datatypen. Inte bara i ingångar utan vi kommer att få ett felmeddelande när vi utför operationer.
Det finns tre metoder för att konvertera en sträng till int som är följande:
- Använda atoi( ) Använda loopar Använda sscanf()
1. Strängkonvertering med atoi( )
Funktionen atoi() i C tar en teckenuppsättning eller sträng literal som ett argument och returnerar dess värde i en heltal . Det definieras i header-fil.
Om du observerar bogsera() lite närmare kommer du att få reda på att det står för:

Fördelning av atoi() i enkla termer
Exempel:
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;> }> |
>
>Produktion
atoi(141) is 141 atoi(3.14) is 3>
Atoi beter sig lite annorlunda för sträng. Låt oss kolla hur:
Exempel:
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;> }> |
>
>Produktion
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Förklaring:
- Geek 12345 här är 'Geek' det första ordet så svaret blir: 0 (inget nummer)
- 12345 Nörd här är '12345' det första ordet så svaret blir: 12345
2. Använda loopar
Vi kan använda loopar för att konvertera en sträng till ett heltal genom att korsa varje element i strängen en efter en och jämföra siffertecken med deras ASCII-värden för att få deras numeriska värden och använda lite matematik för att generera heltal. Exemplet nedan visar hur man gör.
Exempel:
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;> }> |
>
>Produktion
4213>
Notera: Vi har använt str[i] – 48 för att konvertera siffertecknet till deras numeriska värden. För t.ex. ASCII-värdet för tecknet '5' är 53, så 53 – 48 = 5 vilket är dess numeriska värde.
3. Använda sscanf()
Vi kan använda sscanf() för att enkelt konvertera en sträng till ett heltal. Denna funktion läser den formaterade inmatningen från strängen.
Syntax för sscanf:
int sscanf (const char * source, const char * formatted_string, ...);>
Parametrar :
- källa – källsträng. formatted_string – en sträng som innehåller formatspecifikationer . … : – variabelargumentlista som innehåller adressen till de variabler där vi vill lagra indata.
Det bör finnas minst lika många av dessa argument som antalet värden som lagras av formatspecifikationerna. Vid framgång returnerar funktionen antalet fyllda variabler. I fallet med ett inmatningsfel, innan någon data kunde läsas framgångsrikt, returneras EOF.
Exempel:
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;> }> |
>
>Produktion
The value of x : 12345 The value of x : 12345.540039>
Kan vi typcasta String till int?
Svaret är NEJ . Om vi använder typecasting för att konvertera strängen till ett tal får vi ett fel som visas i exemplet nedan.
Exempel:
C
datastruktur
// 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;> }> |
>
>
Produktion:
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>
Förklaring: Som båda string och int är inte i samma objekthierarki , vi kan inte utföra implicit eller explicit typgjutning som vi kan göra vid dubbel till int eller float till int konvertering.
I ovanstående kod kan vi se att utgången ger varningen med något skräpvärde inuti. Så för att undvika sådana förhållanden använder vi metoderna som anges ovan.