Eilutės konvertavimas į int yra pasikartojanti užduotis programavimo pasaulyje. Nepaisant to, kad užduotis yra paprasta, daugelis programuotojų tai darydami sugenda arba susipainioja. Konvertavimas dažniausiai atliekamas tam, kad galėtume atlikti operacijas su skaičiais, kurie saugomi kaip eilutės.
10 procentų iš 60
Pavyzdys:
str=163″
skaičius = 163
C yra stipriai spausdinama kalba. Gausime klaidą, jei bandysime įvesti reikšmę, kuri nepriimtina su duomenų tipu. Ne tik įvesties, bet ir atlikdami operacijas gausime klaidą.
Yra 3 būdai konvertuoti eilutę į int, kurie yra tokie:
- Atoi( ) naudojimas Kilpų naudojimas Naudojant sscanf()
1. Eilučių konvertavimas naudojant atoi( )
Funkcija atoi() programoje C naudoja simbolių masyvą arba eilutę kaip argumentą ir grąžina jo reikšmę sveikasis skaičius . Jis apibrėžtas antraštės failą.
Jei stebite vilkti () šiek tiek arčiau sužinosite, kad tai reiškia:

Atoi() suskirstymas paprastais žodžiais
Pavyzdys:
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;> }> |
>
>Išvestis
atoi(141) is 141 atoi(3.14) is 3>
Atoi styginiams elgiasi kiek kitaip. Patikrinkime kaip:
Pavyzdys:
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;> }> |
>
>Išvestis
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Paaiškinimas:
- Geek 12345 čia „Geek“ yra pirmasis žodis, todėl atsakymas bus: 0 (Nėra skaičiaus)
- 12345 Geek čia „12345“ yra pirmasis žodis, todėl atsakymas bus toks: 12345
2. Kilpų naudojimas
Galime naudoti kilpas, norėdami konvertuoti eilutę į sveikąjį skaičių, perbraukdami kiekvieną eilutės elementą po vieną ir palygindami skaičių simbolius su jų ASCII reikšmėmis, kad gautume jų skaitines reikšmes, ir naudodami tam tikrą matematiką sveikajam skaičiui generuoti. Žemiau pateiktame pavyzdyje parodyta, kaip tai padaryti.
Pavyzdys:
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;> }> |
>
>Išvestis
4213>
Pastaba: naudojome str[i] – 48, norėdami konvertuoti skaičiaus simbolį į jų skaitines reikšmes. Dėl pvz. Simbolio „5“ ASCII reikšmė yra 53, taigi 53–48 = 5, tai yra jo skaitinė reikšmė.
3. Naudojant sscanf()
Galime naudoti sscanf() norėdami lengvai konvertuoti eilutę į sveikąjį skaičių. Ši funkcija nuskaito suformatuotą įvestį iš eilutės.
sscanf sintaksė:
int sscanf (const char * source, const char * formatted_string, ...);>
Parametrai :
- šaltinis – šaltinio eilutė. formatted_string – eilutė, kurioje yra formato specifikacijos . … : – kintamųjų argumentų sąrašas, kuriame yra kintamųjų, kuriuose norime saugoti įvesties duomenis, adresai.
Šių argumentų turėtų būti bent tiek, kiek reikšmių, kurias saugo formato specifikatoriai. Sėkmingai funkcija grąžina užpildytų kintamųjų skaičių. Įvesties gedimo atveju, prieš sėkmingai nuskaitant bet kokius duomenis, grąžinamas EOF.
Pavyzdys:
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;> }> |
>
>Išvestis
The value of x : 12345 The value of x : 12345.540039>
Ar galime įvesti String į int?
Atsakymas yra NE . Jei eilutę konvertuodami į skaičių naudosime tipo siuntimą, gausime klaidą, kaip parodyta toliau pateiktame pavyzdyje.
Pavyzdys:
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;> }> |
>
>
Išvestis:
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>
Paaiškinimas: Kaip ir abu eilutė ir int nėra toje pačioje objektų hierarchijoje , mes negali atlikti numanomo ar eksplicitinio tipo liejimo kaip galime padaryti dvigubo į int arba float į int atveju.
Aukščiau pateiktame kode matome, kad išvestis pateikia įspėjimą su bet kokia šiukšlių verte. Taigi, norėdami išvengti tokių sąlygų, naudojame aukščiau nurodytus metodus.