logo

Previesť reťazec na int v C

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

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.