Konverzia reťazca na int je vo svete programovania opakujúca sa úloha. Napriek tomu, že ide o jednoduchú úlohu, mnoho programátorov buď zlyhá, alebo sa pri tom zmätie. Konverzia sa väčšinou robí tak, že môžeme vykonávať operácie nad číslami, ktoré sú uložené ako reťazce.
Príklad:
str=163″
číslo = 163
C je silne typizovaný jazyk. Ak sa pokúsime zadať hodnotu, ktorá nie je pre daný typ údajov prijateľná, zobrazí sa chyba. Nielen vo vstupoch, ale pri vykonávaní operácií dostaneme chybu.
Existujú 3 spôsoby prevodu reťazca na int, ktoré sú nasledovné:
- Používanie atoi() Používanie slučiek Používanie sscanf()
1. Konverzia reťazcov pomocou atoi( )
Funkcia atoi() v C berie ako argument pole znakov alebo reťazcový literál a vracia jeho hodnotu v an celé číslo . Je definovaný v hlavičkový súbor.
urobiť while slučku v jave
Ak pozorujete ťahať () trochu bližšie zistíte, že to znamená:

Rozdelenie atoi() jednoduchým spôsobom
Príklad:
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;> }> |
>
>Výkon
atoi(141) is 141 atoi(3.14) is 3>
Atoi sa pre strunu správa trochu inak. Pozrime sa, ako:
Príklad:
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;> }> |
>
>Výkon
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Vysvetlenie:
- Geek 12345 tu „Geek“ je prvé slovo, takže odpoveď bude: 0 (žiadne číslo)
- 12345 Geek tu „12345“ je prvé slovo, takže odpoveď bude: 12345
2. Používanie slučiek
Môžeme použiť slučky na konverziu reťazca na celé číslo tak, že prechádzame každým prvkom reťazca jeden po druhom a porovnávame číselné znaky s ich hodnotami ASCII, aby sme získali ich číselné hodnoty, a pomocou určitej matematiky na generovanie celého čísla. Nižšie uvedený príklad ukazuje, ako to urobiť.
Príklad:
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;> }> |
>
význam dhl
>Výkon
4213>
Poznámka: Na prevod číselného znaku na ich číselné hodnoty sme použili str[i] – 48. Pre napr. Hodnota ASCII znaku „5“ je 53, teda 53 – 48 = 5, čo je jeho číselná hodnota.
3. Použitie sscanf()
Na jednoduchú konverziu reťazca na celé číslo môžeme použiť sscanf(). Táto funkcia číta formátovaný vstup z reťazca.
Syntax sscanf:
int sscanf (const char * source, const char * formatted_string, ...);>
Parametre :
- source – zdrojový reťazec. formatted_string – reťazec, ktorý obsahuje špecifikátory formátu . … : – zoznam argumentov premennej, ktorý obsahuje adresy premenných, do ktorých chceme uložiť vstupné dáta.
Týchto argumentov by malo byť aspoň toľko, koľko hodnôt je uložených v špecifikátoroch formátu. V prípade úspechu funkcia vráti počet vyplnených premenných. V prípade zlyhania vstupu, predtým, ako by bolo možné úspešne prečítať akékoľvek údaje, sa vráti EOF.
Príklad:
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;> }> |
>
>Výkon
The value of x : 12345 The value of x : 12345.540039>
Môžeme pretypovať reťazec na int?
Odpoveď je NIE . Ak použijeme pretypovanie na prevod reťazca na číslo, dostaneme chybu, ako je znázornené v príklade nižšie.
Príklad:
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;> }> |
>
zobraziť skryté aplikácie
>
Výkon:
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>
Vysvetlenie: Ako oboje string a int nie sú v rovnakej hierarchii objektov , my nemôže vykonávať implicitné alebo explicitné pretypovanie ako to môžeme urobiť v prípade konverzie double na int alebo float na int.
Vo vyššie uvedenom kóde vidíme, že výstup dáva varovanie s akoukoľvek hodnotou odpadu vo vnútri. Aby sme sa vyhli takýmto podmienkam, používame vyššie uvedené metódy.