logo

Konverter streng til int i C

Konvertering av streng til int er en gjentagende oppgave i programmeringsverdenen. Til tross for at det er en enkel oppgave, feiler mange kodere enten eller blir forvirret mens de gjør dette. Konvertering gjøres stort sett slik at vi kan utføre operasjoner over tall som er lagret som strenger.

Eksempel:



str=163'

tall=163

C er et sterkt skrevet språk. Vi får en feilmelding hvis vi prøver å legge inn en verdi som ikke er akseptabel med datatypen. Ikke bare i innganger, men vi vil få en feilmelding mens vi utfører operasjoner.



Det er 3 metoder for å konvertere en streng til int, som er som følger:

    Bruke atoi( ) Bruke looper Bruke sscanf()

1. Strengkonvertering ved hjelp av atoi( )

atoi()-funksjonen i C tar en tegnmatrise eller streng bokstavelig som et argument og returnerer verdien i en heltall . Det er definert i header-fil.

Hvis du observerer slepe() litt nærmere vil du finne ut at det står for:



Nedbryting av atoi() på en enkel måte

Nedbryting av atoi() på en enkel måte

Eksempel:

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

>

få matriselengde i c
>

Produksjon

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

Atoi oppfører seg litt annerledes for streng. La oss sjekke hvordan:

Eksempel:

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

gnistopplæring

>

>

Produksjon

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

Forklaring:

  • Geek 12345 her er 'Geek' det første ordet, så svaret vil være: 0 (ingen tall)
  • 12345 Geek her er '12345' det første ordet, så svaret vil være: 12345

2. Bruke løkker

Vi kan bruke løkker til å konvertere en streng til et heltall ved å krysse hvert element i strengen en etter en og sammenligne talltegnene med deres ASCII-verdier for å få deres numeriske verdier og bruke litt matematikk for å generere heltallet. Eksempelet nedenfor viser hvordan du gjør det.

Eksempel:

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

>

>

Produksjon

4213>

Merk: Vi har brukt str[i] – 48 for å konvertere talltegnet til deres numeriske verdier. For f.eks. ASCII-verdien til tegnet '5' er 53, så 53 – 48 = 5 som er dens numeriske verdi.

3. Bruke sscanf()

Vi kan bruke sscanf() for enkelt å konvertere en streng til et heltall. Denne funksjonen leser den formaterte inngangen fra strengen.

Syntaks for sscanf:

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

Parametere :

    kilde – kildestreng. formatted_string – en streng som inneholder formatspesifikasjoner . … : – liste over variable argumenter som inneholder adressen til variablene der vi ønsker å lagre inndata.

Det bør være minst like mange av disse argumentene som antallet verdier som er lagret av formatspesifikasjonene. Ved suksess returnerer funksjonen antall variabler fylt. I tilfelle en inngangsfeil, før noen data kunne leses, returneres EOF.

Eksempel:

C

arraylist sortert




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

>

>

Produksjon

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

Kan vi typecaste String til int?

Svaret er NEI . Hvis vi bruker typecasting for å konvertere strengen til et tall, vil vi få en feil som vist i eksempelet nedenfor.

Eksempel:

C

len av streng i java




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

>

>

Produksjon:

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>

Forklaring: Som begge streng og int er ikke i samme objekthierarki , vi kan ikke utføre implisitt eller eksplisitt type casting som vi kan gjøre i tilfelle av dobbel til int eller float til int konvertering.

I koden ovenfor kan vi se at utgangen gir advarselen med en søppelverdi inne i den. Så for å unngå slike forhold bruker vi metodene spesifisert ovenfor.