logo

Konverter streng til int i C

Konvertering af streng til int er en tilbagevendende opgave i programmeringsverdenen. På trods af at det er en simpel opgave, fejler mange kodere enten eller bliver forvirrede, mens de gør dette. Konvertering sker for det meste, så vi kan udføre operationer over tal, der er gemt som strenge.

Eksempel:



str=163'

tal=163

C er et stærkt maskinskrevet sprog. Vi får en fejl, hvis vi forsøger at indtaste en værdi, der ikke er acceptabel med datatypen. Ikke kun i input, men vi får en fejl, mens vi udfører operationer.



Der er 3 metoder til at konvertere en streng til int, som er som følger:

    Brug af atoi( ) Brug af loops Brug af sscanf()

1. Strengkonvertering ved hjælp af atoi( )

Atoi()-funktionen i C tager en tegnmatrix eller streng literal som et argument og returnerer dens værdi i en heltal . Det er defineret i header-fil.

Hvis du observerer bugsere() lidt nærmere vil du finde ud af, at det står for:



Opdeling af atoi() i enkle vendinger

Opdeling af atoi() i enkle vendinger

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å array længde i c
>

Produktion

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

Atoi opfører sig lidt anderledes for streng. Lad os tjekke 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;> }>

python generere uuid

>

>

Produktion

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

Forklaring:

  • Nørd 12345 her er 'Nørd' det første ord, så svaret vil være: 0 (intet tal)
  • 12345 Nørd her er '12345' det første ord, så svaret vil være: 12345

2. Brug af løkker

Vi kan bruge loops til at konvertere en streng til et heltal ved at krydse hvert element i strengen en efter en og sammenligne taltegnene med deres ASCII-værdier for at få deres numeriske værdier og bruge noget matematik til at generere heltal. Nedenstående eksempel viser, hvordan man gø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;> }>

>

>

Produktion

4213>

Bemærk: Vi har brugt str[i] – 48 til at konvertere taltegnet til deres numeriske værdier. For f.eks. ASCII-værdien af ​​tegnet '5' er 53, så 53 – 48 = 5, som er dens numeriske værdi.

3. Brug af sscanf()

Vi kan bruge sscanf() til nemt at konvertere en streng til et heltal. Denne funktion læser det formaterede input fra strengen.

Syntaks for sscanf:

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

Parametre :

    kilde – kildestreng. formatted_string – en streng, der indeholder format specifikationer . … : – liste over variable argumenter, der indeholder adressen på de variable, hvori vi ønsker at gemme inputdata.

Der bør være mindst lige så mange af disse argumenter som antallet af værdier gemt af formatspecifikationerne. Ved succes returnerer funktionen antallet af udfyldte variabler. I tilfælde af en inputfejl, før nogen data kunne læses, returneres EOF.

Eksempel:

C

Word hurtig adgang værktøjslinje




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

>

>

Produktion

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

Kan vi typecaste String til int?

Svaret er INGEN . Hvis vi bruger typecasting til at konvertere strengen til et tal, får vi en fejl som vist i eksemplet nedenfor.

Eksempel:

C

len af ​​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;> }>

>

>

Produktion:

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 dele streng og int er ikke i det samme objekthierarki , vi kan ikke udføre implicit eller eksplicit type casting som vi kan gøre i tilfælde af dobbelt til int eller float til int konvertering.

I ovenstående kode kan vi se, at outputtet giver advarslen med enhver affaldsværdi indeni. Så for at undgå sådanne forhold bruger vi de ovenfor angivne metoder.