Pretvarjanje niza v int je ponavljajoča se naloga v svetu programiranja. Kljub temu, da je naloga preprosta, številni kodirniki pri tem ne uspejo ali se zmedejo. Pretvorba se večinoma izvaja zato, da lahko izvajamo operacije nad številkami, ki so shranjene kot nizi.
primer:
str=163″
število=163
C je strogo tipiziran jezik. Če poskušamo vnesti vrednost, ki ni sprejemljiva za vrsto podatkov, se prikaže napaka. Ne le pri vnosih, ampak med izvajanjem operacij bomo dobili napako.
Obstajajo 3 metode za pretvorbo niza v int, ki so naslednje:
- Uporaba atoi() Uporaba zank Uporaba sscanf()
1. Pretvorba nizov z uporabo atoi( )
Funkcija atoi() v C vzame niz znakov ali literal niza kot argument in vrne njegovo vrednost v celo število . Opredeljena je v naslovna datoteka.
arraylist sort
Če opazujete vleka() malo bližje boste ugotovili, da pomeni:

Razčlenitev atoi() na preprost način
primer:
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;> }> |
>
>Izhod
atoi(141) is 141 atoi(3.14) is 3>
Atoi se za niz obnaša nekoliko drugače. Preverimo, kako:
primer:
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;> }> |
>
>Izhod
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Pojasnilo:
- Geek 12345 tukaj 'Geek' je prva beseda, zato bo odgovor: 0 (brez številke)
- 12345 Geek tukaj '12345' je prva beseda, zato bo odgovor: 12345
2. Uporaba zank
Zanke lahko uporabimo za pretvorbo niza v celo število tako, da prečkamo vsak element niza enega za drugim in primerjamo številske znake z njihovimi vrednostmi ASCII, da dobimo njihove številske vrednosti in uporabimo nekaj matematike za generiranje celega števila. Spodnji primer prikazuje, kako to storiti.
primer:
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;> }> |
>
>Izhod
4213>
Opomba: uporabili smo str[i] – 48 za pretvorbo številskega znaka v njihove številske vrednosti. Za npr. ASCII vrednost znaka '5' je 53, torej 53 – 48 = 5, kar je njegova številska vrednost.
3. Uporaba sscanf()
Za enostavno pretvorbo niza v celo število lahko uporabimo sscanf(). Ta funkcija prebere oblikovani vnos iz niza.
Sintaksa sscanf:
int sscanf (const char * source, const char * formatted_string, ...);>
Parametri :
- izvor – izvorni niz. formatted_string – niz, ki vsebuje specifikatorji formata . … : – seznam argumentov spremenljivk, ki vsebuje naslove spremenljivk, v katere želimo shraniti vhodne podatke.
Teh argumentov mora biti vsaj toliko, kot je število vrednosti, ki jih shranijo specifikatorji formata. Ob uspehu funkcija vrne število izpolnjenih spremenljivk. V primeru neuspešnega vnosa, preden je bilo mogoče kateri koli podatek uspešno prebrati, se vrne EOF.
primer:
C
java sort arraylist
// 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;> }> |
>
>Izhod
The value of x : 12345 The value of x : 12345.540039>
Ali lahko vtipkamo niz v int?
Odgovor je št . Če uporabimo pretvorbo tipov za pretvorbo niza v število, bomo prejeli napako, kot je prikazano v spodnjem primeru.
primer:
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;> }> |
>
>
Izhod:
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>
Pojasnilo: Kot oboje niz in int nista v isti hierarhiji objektov , mi ne more izvesti implicitnega ali eksplicitnega pretvorbe tipa kot lahko storimo v primeru pretvorbe dvojno v int ali plavajoče v int.
V zgornji kodi lahko vidimo, da izhod daje opozorilo s katero koli vrednostjo smeti v njem. Da bi se izognili takim pogojem, uporabljamo zgoraj navedene metode.