logo

Converti String in int in C

La conversione di string in int è un'attività ricorrente nel mondo della programmazione. Nonostante sia un compito semplice, molti programmatori falliscono o si confondono mentre lo fanno. La conversione viene eseguita principalmente in modo da poter eseguire operazioni su numeri memorizzati come stringhe.

Esempio:



str=163″

numero=163

Il C è un linguaggio fortemente tipizzato. Riceveremo un errore se proviamo a inserire un valore che non è accettabile con il tipo di dati. Non solo negli input, ma riceveremo un errore durante l'esecuzione delle operazioni.



Esistono 3 metodi per convertire una stringa in int che sono i seguenti:

    Utilizzando atoi( ) Utilizzando i cicli Utilizzando sscanf()

1. Conversione di stringhe utilizzando atoi()

La funzione atoi() in C accetta un array di caratteri o una stringa letterale come argomento e restituisce il suo valore in an numero intero . È definito nell'art file di intestazione.

Se osservi trainare() avvicinandoti un po’ scoprirai che sta per:



Ripartizione di atoi() in termini semplici

Ripartizione di atoi() in termini semplici

ssh in formato completo

Esempio:

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

>

>

Produzione

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

Atoi si comporta in modo leggermente diverso per le stringhe. Controlliamo come:

Esempio:

myflixer

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

>

>

Produzione

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

Spiegazione:

  • Geek 12345 qui 'Geek' è la prima parola, quindi la risposta sarà: 0 (nessun numero)
  • 12345 Geek qui '12345' è la prima parola, quindi la risposta sarà: 12345

2. Utilizzo dei loop

Possiamo usare i cicli per convertire una stringa in un numero intero attraversando ogni elemento della stringa uno per uno e confrontando i caratteri numerici con i loro valori ASCII per ottenere i loro valori numerici e utilizzando un po' di matematica per generare il numero intero. L'esempio seguente mostra come farlo.

Esempio:

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

>

>

Produzione

4213>

Nota: abbiamo utilizzato str[i] – 48 per convertire il carattere numerico nei relativi valori numerici. Per es. Il valore ASCII del carattere '5' è 53, quindi 53 – 48 = 5 che è il suo valore numerico.

3. Utilizzo di sscanf()

Possiamo usare sscanf() per convertire facilmente una stringa in un numero intero. Questa funzione legge l'input formattato dalla stringa.

Sintassi di sscanf:

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

Parametri :

    source – stringa di origine. formatted_string – una stringa che contiene il file specificatori di formato . …: – elenco di argomenti variabili che contiene l'indirizzo delle variabili in cui vogliamo memorizzare i dati di input.

Dovrebbero esserci almeno tanti argomenti quanti sono i valori memorizzati dagli identificatori di formato. In caso di successo, la funzione restituisce il numero di variabili riempite. In caso di errore nell'input, prima che i dati possano essere letti con successo, viene restituito EOF.

Esempio:

C

converti str in intero




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

>

>

Produzione

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

Possiamo digitare String in int?

La risposta è NO . Se utilizziamo il typecasting per convertire la stringa in un numero, otterremo un errore come mostrato nell'esempio seguente.

Esempio:

C

lunghezza della stringa 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;> }>

>

>

Produzione:

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>

Spiegazione: Come entrambi string e int non sono nella stessa gerarchia di oggetti , Noi non può eseguire il cast di tipo implicito o esplicito come possiamo fare in caso di conversione da double a int o da float a int.

Nel codice sopra, possiamo vedere che l'output fornisce l'avviso con qualsiasi valore spazzatura al suo interno. Pertanto, per evitare tali condizioni, utilizziamo i metodi sopra specificati.