logo

Pārvērtiet virkni par int valodā C

Virknes pārvēršana par int ir programmēšanas pasaulē atkārtots uzdevums. Neskatoties uz to, ka uzdevums ir vienkāršs, daudzi kodētāji to darot vai nu neizdodas, vai apjūk. Pārvēršana galvenokārt tiek veikta, lai mēs varētu veikt darbības ar skaitļiem, kas tiek saglabāti kā virknes.

Piemērs:



str=163″

numurs = 163

C ir spēcīgi tipizēta valoda. Mēs saņemsim kļūdu, ja mēģināsim ievadīt vērtību, kas nav pieņemama ar datu tipu. Ne tikai ievadēs, bet mēs saņemsim kļūdu, veicot darbības.



Ir 3 metodes, kā pārvērst virkni par int, un tās ir šādas:

    Izmantojot atoi( ) Izmantojot cilpas Izmantojot sscanf()

1. Virknes konvertēšana, izmantojot atoi( )

Funkcija atoi() programmā C izmanto rakstzīmju masīvu vai virknes literālu kā argumentu un atgriež tā vērtību vesels skaitlis . Tas ir definēts galvenes fails.

Ja novērojat vilkt () nedaudz tuvāk jūs uzzināsit, ka tas nozīmē:



Atoi() sadalījums vienkāršā izteiksmē

Atoi() sadalījums vienkāršā izteiksmē

Piemērs:

C


formāta virkne java



// 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;> }>

>

>

Izvade

atoi(141) is 141 atoi(3.14) is 3>

Atoi stīgu uzvedas nedaudz savādāk. Pārbaudīsim, kā:

Piemērs:

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;> }>

>

>

Izvade

0 is of 'Geek 12345' 12345 is of '12345 Geek'>

Paskaidrojums:

  • Geek 12345 šeit 'Geek' ir pirmais vārds, tāpēc atbilde būs: 0 (nav skaitļa)
  • 12345 Geek šeit “12345” ir pirmais vārds, tāpēc atbilde būs: 12345

2. Izmantojot cilpas

Mēs varam izmantot cilpas, lai pārvērstu virkni par veselu skaitli, šķērsojot katru virknes elementu pa vienam un salīdzinot skaitļu rakstzīmes ar to ASCII vērtībām, lai iegūtu to skaitliskās vērtības, un izmantojot dažas matemātikas metodes vesela skaitļa ģenerēšanai. Zemāk redzamais piemērs parāda, kā to izdarīt.

Piemērs:

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;> }>

>

>

Izvade

4213>

Piezīme. Mēs esam izmantojuši str[i] – 48, lai pārveidotu skaitļa rakstzīmi to skaitliskajās vērtībās. Par piem. Rakstzīmes “5” ASCII vērtība ir 53, tātad 53–48 = 5, kas ir tā skaitliskā vērtība.

3. Izmantojot sscanf()

Mēs varam izmantot sscanf (), lai viegli pārvērstu virkni par veselu skaitli. Šī funkcija nolasa formatēto ievadi no virknes.

Sscanf sintakse:

int sscanf (const char * source, const char * formatted_string, ...);>

Parametri :

    avots – avota virkne. formatted_string — virkne, kas satur formāta specifikācijas . … : – mainīgo argumentu saraksts, kurā ir to mainīgo adreses, kuros vēlamies saglabāt ievades datus.

Šo argumentu skaitam ir jābūt vismaz tik daudz, cik formāta norādītāju saglabāto vērtību skaits. Veiksmes gadījumā funkcija atgriež aizpildīto mainīgo skaitu. Ievades kļūmes gadījumā pirms datu sekmīgas nolasīšanas tiek atgriezta EOF.

Piemērs:

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;> }>

>

>

Izvade

The value of x : 12345 The value of x : 12345.540039>

Vai mēs varam ierakstīt virkni uz int?

Atbilde ir . Ja mēs izmantojam typecasting, lai pārvērstu virkni par skaitli, mēs saņemsim kļūdu, kā parādīts tālāk esošajā piemērā.

Piemērs:

C




npm tīru kešatmiņu
// 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;> }>

>

>

Izvade:

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>

Paskaidrojums: Kā abi virkne un int neatrodas vienā objektu hierarhijā , mēs nevar veikt netiešu vai tiešu tipa liešanu kā mēs varam darīt dubultās uz int vai peldošās uz int konvertēšanas gadījumā.

Iepriekš minētajā kodā mēs varam redzēt, ka izvade sniedz brīdinājumu ar jebkuru atkritumu vērtību tajā. Tāpēc, lai izvairītos no šādiem apstākļiem, mēs izmantojam iepriekš norādītās metodes.