logo

Convertiți String în int în C

Convertirea șirului de caractere în int este o sarcină recurentă în lumea programării. În ciuda faptului că este o sarcină simplă, mulți programatori fie eșuează, fie devin confuzi în timp ce fac acest lucru. Conversia se face în principal astfel încât să putem efectua operații asupra numerelor care sunt stocate ca șiruri.

Exemplu:



str=163″

număr=163

C este un limbaj puternic tipizat. Vom primi o eroare dacă încercăm să introducem o valoare care nu este acceptabilă cu tipul de date. Nu doar în intrări, dar vom primi o eroare în timpul efectuării operațiilor.



Există 3 metode de a converti un șir în int care sunt după cum urmează:

    Folosind atoi() Utilizarea buclelor Folosind sscanf()

1. Conversie de șiruri folosind atoi( )

Funcția atoi() din C ia o matrice de caractere sau un șir literal ca argument și returnează valoarea acesteia într-un întreg . Este definit în fișier antet.

Dacă observați remorcare() puțin mai aproape, vei afla că înseamnă:



Defalcarea lui atoi() în termeni simpli

Defalcarea lui atoi() în termeni simpli

Exemplu:

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

>

forma completă ssh

>

Ieșire

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

Atoi se comportă puțin diferit pentru șir. Să verificăm cum:

Exemplu:

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

>

>

Ieșire

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

Explicaţie:

  • Geek 12345 aici „Geek” este primul cuvânt, așa că răspunsul va fi: 0 (Fără număr)
  • 12345 Geek aici „12345” este primul cuvânt, așa că răspunsul va fi: 12345

2. Utilizarea buclelor

Putem folosi bucle pentru a converti un șir într-un întreg, parcurgând fiecare element al șirului unul câte unul și comparând caracterele numerice cu valorile lor ASCII pentru a obține valorile lor numerice și folosind câteva matematici pentru generarea întregului. Exemplul de mai jos demonstrează cum se face.

Exemplu:

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

>

>

Ieșire

4213>

Notă: Am folosit str[i] – 48 pentru a converti caracterul numeric în valorile lor numerice. Pentru ex. Valoarea ASCII a caracterului „5” este 53, deci 53 – 48 = 5, care este valoarea sa numerică.

3. Folosind sscanf()

Putem folosi sscanf() pentru a converti cu ușurință un șir într-un număr întreg. Această funcție citește intrarea formatată din șir.

Sintaxa lui sscanf:

convenția de denumire a java
int sscanf (const char * source, const char * formatted_string, ...);>

Parametrii :

    sursă – șir sursă. formatted_string – un șir care conține specificatorii de format . … : – listă de argumente variabile care conține adresa variabilelor în care dorim să stocăm datele de intrare.

Ar trebui să existe cel puțin la fel de multe dintre aceste argumente cât numărul de valori stocate de specificatorii de format. La succes, funcția returnează numărul de variabile completate. În cazul unei erori de intrare, înainte ca orice date să poată fi citite cu succes, este returnat EOF.

Exemplu:

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

>

>

Ieșire

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

Putem tipări String în int?

Raspunsul este NU . Dacă folosim tipărirea pentru a converti șirul într-un număr, vom obține o eroare așa cum se arată în exemplul de mai jos.

Exemplu:

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

>

afișați aplicațiile ascunse

>

Ieșire:

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>

Explicaţie: Ca amândoi string și int nu sunt în aceeași ierarhie a obiectelor , noi nu poate efectua casting de tip implicit sau explicit așa cum putem face în cazul conversiei double to int sau float to int.

În codul de mai sus, putem vedea că ieșirea dă avertismentul cu orice valoare de gunoi în interiorul acestuia. Deci, pentru a evita astfel de condiții, folosim metodele specificate mai sus.