Das Konvertieren von Strings in Int ist eine wiederkehrende Aufgabe in der Programmierwelt. Obwohl es sich um eine einfache Aufgabe handelt, scheitern viele Programmierer dabei entweder oder geraten in Verwirrung. Die Konvertierung erfolgt hauptsächlich, damit wir Operationen mit Zahlen ausführen können, die als Zeichenfolgen gespeichert sind.
Beispiel:
str=163″
Zahl=163
C ist eine stark typisierte Sprache. Wir erhalten eine Fehlermeldung, wenn wir versuchen, einen Wert einzugeben, der für den Datentyp nicht akzeptabel ist. Nicht nur bei Eingaben, sondern auch beim Ausführen von Vorgängen wird eine Fehlermeldung angezeigt.
Es gibt drei Methoden zum Konvertieren eines Strings in int:
- Verwendung von atoi( ) Verwendung von Schleifen Verwendung von sscanf()
1. String-Konvertierung mit atoi( )
Die Funktion atoi() in C verwendet ein Zeichenarray oder ein Zeichenfolgenliteral als Argument und gibt seinen Wert in einer zurück ganze Zahl . Es ist in der definiert Header-Datei.
Wenn Sie beobachten Abschleppen() Wenn Sie etwas genauer hinschauen, werden Sie feststellen, dass es für Folgendes steht:

Aufschlüsselung von atoi() in einfachen Worten
Beispiel:
Escape-Zeichen Java
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;> }> |
>
>Ausgabe
atoi(141) is 141 atoi(3.14) is 3>
Bei String verhält sich Atoi etwas anders. Schauen wir uns an, wie:
Beispiel:
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;> }> |
>
Fabrikdesignmuster
>Ausgabe
0 is of 'Geek 12345' 12345 is of '12345 Geek'>
Erläuterung:
- Geek 12345 hier ist „Geek“ das erste Wort, daher lautet die Antwort: 0 (Keine Zahl)
- 12345 Geek hier ist „12345“ das erste Wort, also lautet die Antwort: 12345
2. Schleifen verwenden
Wir können Schleifen verwenden, um eine Zeichenfolge in eine Ganzzahl umzuwandeln, indem wir jedes Element der Zeichenfolge einzeln durchlaufen und die Zahlenzeichen mit ihren ASCII-Werten vergleichen, um ihre numerischen Werte zu erhalten, und indem wir etwas Mathematik zum Erzeugen der Ganzzahl verwenden. Das folgende Beispiel zeigt, wie es geht.
Beispiel:
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;> }> |
>
>
Funktionen von ArduinoAusgabe
4213>
Hinweis: Wir haben str[i] – 48 verwendet, um die Zahlenzeichen in ihre numerischen Werte umzuwandeln. Für z.B. Der ASCII-Wert des Zeichens „5“ ist 53, also 53 – 48 = 5, was sein numerischer Wert ist.
3. Verwendung von sscanf()
Wir können sscanf() verwenden, um einen String einfach in eine Ganzzahl umzuwandeln. Diese Funktion liest die formatierte Eingabe aus der Zeichenfolge.
Syntax von sscanf:
int sscanf (const char * source, const char * formatted_string, ...);>
Parameter :
Shilpa Shetty Alter
- Quelle – Quellzeichenfolge. formatted_string – eine Zeichenfolge, die die enthält Formatspezifizierer . … : – Liste der Variablenargumente, die die Adresse der Variablen enthält, in denen wir Eingabedaten speichern möchten.
Es sollten mindestens so viele dieser Argumente vorhanden sein, wie von den Formatbezeichnern gespeicherte Werte vorhanden sind. Bei Erfolg gibt die Funktion die Anzahl der gefüllten Variablen zurück. Im Falle eines Eingabefehlers wird EOF zurückgegeben, bevor Daten erfolgreich gelesen werden konnten.
Beispiel:
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;> }> |
>
>Ausgabe
The value of x : 12345 The value of x : 12345.540039>
Können wir String in int umwandeln?
Die Antwort ist NEIN . Wenn wir die Zeichenfolge mithilfe der Typumwandlung in eine Zahl umwandeln, erhalten wir eine Fehlermeldung, wie im folgenden Beispiel gezeigt.
Beispiel:
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;> }> |
>
Algorithmus für RSA
>
Ausgabe:
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>
Erläuterung: Wie beide string und int befinden sich nicht in derselben Objekthierarchie , Wir kann keine implizite oder explizite Typumwandlung durchführen wie wir es bei der Konvertierung von Double in Int oder Float in Int tun können.
Im obigen Code können wir sehen, dass die Ausgabe die Warnung mit einem darin enthaltenen Müllwert ausgibt. Um solche Bedingungen zu vermeiden, verwenden wir die oben genannten Methoden.