1. Kurze Einführung

In der C-Sprache gibt es für die Konvertierung zwischen Ganzzahlen und Zeichenketten weit verbreitete Erweiterungsfunktionen (Nicht-Standard-Bibliothek), und Sie können auch einfache Implementierungen selbst ausprobieren.


2. Integer zu String

1. Erweiterungsfunktion itoa

itoa (bedeutet Ganzzahl zu alphanumerisch) ist eine Funktion, die eine Ganzzahl in eine Zeichenkette umwandelt.

In der Windows-Umgebung, in der Header-Datei <stdlib.h>:

char* itoa(int value,char*string,int radix);//value: 要转换的整数,string: 转换后的字符串,radix: 转换进制数,如2,8,10,16 进制等。

Funktionsquellcode:

char* itoa(int num,char* str,int radix) { char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//Indextabelle unsigned unum;//Absolutwert der zu konvertierenden Ganzzahl speichern; die zu konvertierende Ganzzahl kann negativ sein. int i=0,j,k;//i wird verwendet, um die entsprechende Position in der Zeichenkette anzugeben. Nach der Konvertierung ist i tatsächlich die Länge der Zeichenkette; die Reihenfolge nach der Konvertierung ist umgekehrt. Wenn ein Vorzeichen vorhanden ist, wird k verwendet, um die Startposition für die Anpassung der Reihenfolge anzugeben; j wird zum Tauschen während der Reihenfolgeanpassung verwendet. //Absolutwert der zu konvertierenden Ganzzahl ermitteln if(radix==10&&num<0)//Um in eine Dezimalzahl umzuwandeln und sie ist negativ { unum=(unsigned)-num;//unum den Absolutwert von num zuweisen str[i++]='-';//'-' an den Anfang der Zeichenkette setzen und den Index um 1 erhöhen } else unum=(unsigned)num;//Wenn num positiv ist, unum direkt zuweisen //Konvertierungsteil; beachten Sie, dass das Ergebnis in umgekehrter Reihenfolge vorliegt do { str[i++]=index[unum%(unsigned)radix];//Nimm die letzte Ziffer von unum, setze sie an die entsprechende Position von str und erhöhe den Index um 1 unum/=radix;//Entferne die letzte Ziffer von unum }while(unum);//Beende die Schleife, wenn unum 0 ist str[i]='\0';//Füge das Zeichen '\0' am Ende der Zeichenkette hinzu, C-Zeichenketten enden mit '\0'. //Kehre die Reihenfolge um if(str[0]=='-') k=1;//Wenn sie negativ ist, muss das Vorzeichen nicht angepasst werden, beginne die Anpassung nach dem Vorzeichen else k=0;//Wenn nicht negativ, muss alles angepasst werden char temp;//Temporäre Variable, verwendet beim Tauschen zweier Werte for(j=k;j<=(i-1)/2;j++)//Symmetrisch von Anfang bis Ende tauschen, i ist tatsächlich die Länge der Zeichenkette, der maximale Index ist Länge minus 1 { temp=str[j];//Weise den Anfang der temporären Variable zu str[j]=str[i-1+k-j];//Weise das Ende dem Anfang zu str[i-1+k-j]=temp;//Weise den Wert der temporären Variable (eigentlich der vorherige Anfangswert) dem Ende zu } return str;//Gib die konvertierte Zeichenkette zurück }

Beispielprogramm:

Beispiel

#include <stdlib.h> #include <stdio.h> int main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; itoa(number1,string,10); printf("Zahl: %d, konvertierte Zeichenkette: %s\n",number1,string); itoa(number2,string,10); printf("Zahl: %d, konvertierte Zeichenkette: %s\n",number2,string); return 0; }

Screenshot des Effekts:


2. Einfache Implementierung selbst vornehmen

Implementierungscode:

Beispiel

#include <stdio.h> char* Int2String(int num,char *str);//Funktionsdeklaration int main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; Int2String(number1,string); printf("Zahl: %d, konvertierte Zeichenkette: %s\n",number1,string); Int2String(number2,string); printf("Zahl: %d, konvertierte Zeichenkette: %s\n",number2,string); return 0; } char* Int2String(int num,char *str)//Dezimal { int i = 0;//Auffüllen von str anzeigen if(num<0)//Wenn num negativ ist, mache num positiv { num = -num; str[i++] = '-'; } //Umwandlung do { str[i++] = num%10+48;//Nimm die niedrigste Ziffer von num. Die ASCII-Codes der Zeichen 0~9 sind 48~57; einfach ausgedrückt: Zahl 0 + 48 = 48, der ASCII-Code entspricht dem Zeichen '0' num /= 10;//Entferne die niedrigste Ziffer }while(num);//Wenn num nicht 0 ist, setze die Schleife fort str[i] = '\0'; //Bestimme die Startposition für die Anpassung int j = 0; if(str[0]=='-')//Wenn ein Minuszeichen vorhanden ist, muss das Minuszeichen nicht angepasst werden { j = 1;//Beginne die Anpassung ab der zweiten Position ++i;//Wegen des Minuszeichens muss die Symmetrieachse des Tauschs ebenfalls um 1 Position nach hinten verschoben werden } //Symmetrischer Tausch for(;j<i/2;j++) { //Die Werte an beiden Enden symmetrisch vertauschen. Tatsächlich spart es die Zwischenvariable, um a+b zu vertauschen: a=a+b; b=a-b; a=a-b; str[j] = str[j] + str[i-1-j]; str[i-1-j] = str[j] - str[i-1-j]; str[j] = str[j] - str[i-1-j]; } return str;//Gibt den konvertierten Wert zurück }

Screenshot des Effekts:


3. Zeichenkette zu Ganzzahl

1. Erweiterungsfunktion

atoi (bedeutet alphanumerisch zu Ganzzahl) ist eine Funktion, die eine Zeichenkette in eine Ganzzahl umwandelt.

In der Windows-Umgebung, in der Header-Datei <stdlib.h>.

int atoi(const char *nptr); // Funktion zur Umwandlung von Zeichenkette in Ganzzahl, nptr: die umzuwandelnde Zeichenkette

Funktionsquellcode

int atoi(const char *nptr) { return (int)atol(nptr); } long atol(const char *nptr) { int c; /*Das aktuelle Zeichen, das umgewandelt werden soll (Zeichen einzeln in Zahlen umwandeln)*/ long total; /*Aktuelles Umwandlungsergebnis*/ int sign; /*Kennzeichen, ob das Umwandlungsergebnis ein Minuszeichen hat*/ /*Leerzeichen überspringen, Leerzeichen werden nicht umgewandelt*/ while ( isspace((int)(unsigned char)*nptr) ) ++nptr; c = (int)(unsigned char)*nptr++;//Zeichen für die Umwandlung vorbereiten sign = c; /*Vorzeichenindikator speichern*/ if (c == '-' || c == '+') c = (int)(unsigned char)*nptr++; /*'+' und '-' Vorzeichen überspringen, nicht umwandeln*/ total = 0;//Umwandlungsergebnis auf 0 setzen while (isdigit(c)) {//Wenn das Zeichen eine Ziffer ist total = 10 * total + (c - '0'); /*//Wandle das Zeichen gemäß dem ASCII-Code in die entsprechende Ziffer um und multipliziere mit 10, um es zum Ergebnis zu addieren*/ c = (int)(unsigned char)*nptr++; /*//Das nächste Zeichen holen*/ } //Das Ergebnis je nach Vorzeichenindikator mit oder ohne Minuszeichen zurückgeben if (sign == '-') return -total; else return total; }

Beispielprogramm:

Beispiel

#include<stdio.h> #include<stdlib.h> int main() { printf("String\"123456\"In eine Zahl umwandeln: %d\n",atoi("123456")); printf("String\"-123456\"In eine Zahl umwandeln: %d\n",atoi("-123456")); return 0; }

2. Einfache Implementierung selbst vornehmen

Quellcode der Implementierung:

Beispiel

#include<stdio.h> int String2Int(char *str);//Funktionsdeklaration int main() { printf("String\"123456\"In eine Zahl umwandeln: %d\n",String2Int("123456")); printf("String\"-123456\"In Zahl umwandeln: %d\n",String2Int("-123456")); return 0; } int String2Int(char *str)//String in Zahl umwandeln { char flag = '+';//Gibt an, ob das Ergebnis ein Vorzeichen hat long res = 0; if(*str=='-')//Der String hat ein Minuszeichen { ++str;//Zum nächsten Zeichen zeigen flag = '-';//Flag auf negativ setzen } //Zeichen für Zeichen umwandeln und zum Ergebnis res akkumulieren while(*str>=48 && *str<=57)//Nur umwandeln, wenn es eine Ziffer ist. ASCII-Codes der Ziffern 0~9: 48~57 { res = 10*res+ *str++-48;//Der ASCII-Code des Zeichens '0' ist 48, 48-48=0, was genau in die Ziffer 0 umgewandelt wird } if(flag == '-')//Fall einer negativen Zahl behandeln { res = -res; } return (int)res; }

Bildschirmfoto:


4. Verwendung der Funktionen sprintf() und sscanf()

Ganzzahl in Zeichenkette

Testcode:

Beispiel

#include <stdio.h> char* Int2String(int num,char *str);//Funktionsdeklaration int main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; Int2String(number1,string); printf("Zahl: %d, konvertierte Zeichenkette: %s\n",number1,string); Int2String(number2,string); printf("Zahl: %d, konvertierte Zeichenkette: %s\n",number2,string); return 0; } char* Int2String(int num,char *str) { sprintf(str, "%d", num); return str; }

Ausführungsergebnis:

Zeichenkette in Ganzzahl

Testcode:

Beispiel

#include<stdio.h> int String2Int(char *str);//Funktionsdeklaration int main() { printf("String\"123456\"In eine Zahl umwandeln: %d\n",String2Int("123456")); printf("String\"-123456\"In Zahl umwandeln: %d\n",String2Int("-123456")); return 0; } int String2Int(char *str)//String in Zahl umwandeln { char flag = '+';//Gibt an, ob das Ergebnis ein Vorzeichen hat long res = 0; if(*str=='-')//Der String hat ein Minuszeichen { ++str;//Zum nächsten Zeichen zeigen flag = '-';//Setze das Flag auf negativ } sscanf(str, "%ld", &res); if(flag == '-') { res = -res; } return (int)res; }

Ausführungsergebnis:


5. Anhang: ASCII-Codetabelle (teilweise)

Autor: Genven_Liang

Originalartikel: https://blog.csdn.net/nanfeibuyi/article/details/80811498