Merkkijonon muuntaminen int:ksi on toistuva tehtävä ohjelmointimaailmassa. Vaikka tehtävä on yksinkertainen, monet koodaajat joko epäonnistuvat tai hämmentyvät tehdessään tätä. Muunnos tehdään enimmäkseen, jotta voimme suorittaa operaatioita merkkijonoina tallennetuille numeroille.
Esimerkki:
str=163″
numero = 163
C on vahvasti tyypitetty kieli. Saamme virheilmoituksen, jos yritämme syöttää arvon, joka ei ole hyväksyttävä tietotyypin kanssa. Ei vain tuloissa, vaan saamme virheen suoritettaessa toimintoja.
On 3 tapaa muuntaa merkkijono int:ksi, jotka ovat seuraavat:
- Atoi( ) -silmukoiden käyttäminen sscanf()
1. Merkkijonon muunnos käyttämällä atoi( )
C:n atoi()-funktio ottaa merkkijonon tai merkkijonoliteraalin argumenttina ja palauttaa sen arvon kokonaisluku . Se on määritelty kohdassa otsikkotiedosto.
Jos tarkkailet hinata () hieman lähempänä huomaat, että se tarkoittaa:

Atoi():n erittely yksinkertaisin termein
Esimerkki:
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;> }> |
kuinka muuttaa merkkijono int
>
>Lähtö
atoi(141) is 141 atoi(3.14) is 3>
Atoi käyttäytyy hieman eri tavalla jousille. Katsotaanpa miten:
Esimerkki:
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;> }> |
>
>Lähtö
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Selitys:
- Geek 12345 tässä 'Geek' on ensimmäinen sana, joten vastaus on: 0 (Ei numeroa)
- 12345 Geek tässä '12345' on ensimmäinen sana, joten vastaus on: 12345
2. Silmukoiden käyttäminen
Voimme käyttää silmukoita muuntaaksesi merkkijonon kokonaisluvuksi läpikäymällä jokaisen merkkijonon elementin yksitellen ja vertaamalla numeromerkkejä niiden ASCII-arvoihin saadakseen niiden numeeriset arvot ja käyttämällä jonkin verran matematiikkaa kokonaisluvun luomiseen. Alla oleva esimerkki osoittaa, kuinka se tehdään.
Esimerkki:
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;> }> |
>
execlp
>Lähtö
4213>
Huomautus: Olemme käyttäneet str[i] – 48 muuntaaksesi numeromerkin niiden numeerisiksi arvoiksi. Esim. Merkin '5' ASCII-arvo on 53, joten 53 - 48 = 5, joka on sen numeerinen arvo.
3. sscanf()
Voimme käyttää sscanf()-komentoa muuntaaksesi merkkijonon helposti kokonaisluvuksi. Tämä toiminto lukee muotoillun syötteen merkkijonosta.
sscanf:n syntaksi:
int sscanf (const char * source, const char * formatted_string, ...);>
Parametrit :
- lähde – lähdemerkkijono. formatted_string – merkkijono, joka sisältää muotomäärityksiä . … : – muuttujaargumenttien luettelo, joka sisältää niiden muuttujien osoitteet, joihin haluamme tallentaa syöttödataa.
Näitä argumentteja tulee olla vähintään yhtä monta kuin muotomäärittelijöiden tallentamia arvoja. Onnistuessaan funktio palauttaa täytettyjen muuttujien määrän. Jos syöttö epäonnistuu, EOF palautetaan ennen kuin mitään dataa on voitu lukea.
Esimerkki:
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;> }> |
>
>Lähtö
The value of x : 12345 The value of x : 12345.540039>
Voimmeko kirjoittaa Stringin int-muotoon?
Vastaus on EI . Jos muunnamme merkkijonon numeroksi typecastingin avulla, saamme alla olevan esimerkin mukaisesti virheilmoituksen.
Esimerkki:
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;> }> |
>
>
Lähtö:
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>
Selitys: Kuten molemmat merkkijono ja int eivät ole samassa objektihierarkiassa , me ei voi suorittaa implisiittistä tai eksplisiittistä tyyppivalua kuten voimme tehdä double to int tai float int muunnoksen tapauksessa.
Yllä olevassa koodissa voimme nähdä, että tulos antaa varoituksen, jonka sisällä on mikä tahansa roskaarvo. Joten tällaisten olosuhteiden välttämiseksi käytämme edellä määriteltyjä menetelmiä.