C++ - Umwandlung/casting String Buchstaben in integer-Werte (ASCII)
Ich bin derzeit dabei ein Projekt, wo ich zwei Daten-Strukturen, die verwendet werden, um enthalten Zeichenfolgen. Einer von Ihnen hat eine form der verketteten Liste, und ich habe adivsed zu trennen die Wörter in separate Listen, in der es für jeden Buchstaben des Alphabets. Bin ich verpflichtet zu denken um Effizienz, also ich habe ein array der Kopf-Zeiger von Größe 26, und bin zu wollen, konvertieren Sie das erste Zeichen des Wortes gegeben, in eine ganze Zahl, so kann ich es in der index, wie zum Beispiel:
//a string called s is passed as a parameter to the function
int i = /*some magic happens here*/ s.substr(0, 1);
currentPointer = heads[i]; //then I start iterating through the list
Ich habe auf der Suche um und ich habe seemd gefunden zu haben, ist wie eine verdeckte Anzahl von Zeichen in Zeichenketten in ganze zahlen und nicht Buchstaben, und ich wundere mich, wie auf der Erde ich kann diese Arbeit ohne Rückgriff auf eine riesige und hässliche Reihe von if-Anweisungen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Einstellung die ich an den Wert des ersten Zeichens, Sie werden immer den ASCII-Wert.
Also ich habe mich aus Ihrem 0-25 Bereich : Siehe man ascii
Sie können es reduzieren, durch Abzug von den ersten ascii-alaphabet Buchstaben. (Be Pflege voll mit dem Fall)
Die Herstellung der ASCII-Wert von 'z' = 112 und 25 für den reduzierten Wert, als erwartet.
std::toupper()
undstd::tolower()
zu konvertieren, bevor Sie den Vergleich. Dies beseitigt die Notwendigkeit, zu überprüfen, sowohl gegen die groß-und Kleinschreibung sowie simplfy die Mathematik.Ich glaube, Sie sind verwirrend Werte mit Darstellungen. "Zehn" "10" und "1 1 1 1 1 1 1 1 1 1" sind alle das gleiche Wert, nur anders dargestellt.
Gibt es keinen Unterschied. Zeichen sind immer durch Integer repräsentiert sowieso. Es ist nur eine Frage der Darstellung. Zeigen Sie einfach den Wert, wie Sie wollen.
Durch die Art und Weise, dies ist ein wichtiges Konzept haben die Programmierer zu verstehen. So lohnt es sich, verbringen einige Zeit darüber nachzudenken.
Ist ein klassisches Beispiel für dieses Missverständnis ist eine Frage wie "ich habe eine variable
i
, dass einige Werte in dezimal. Wie kann ich es machen das speichern eines Werts in hex?" Natürlich, dass macht keinen Sinn, es speichert Werte und hex und decimal sind Darstellungen. Wenn Sie zehn Autos, zehn in Autos, nicht in dezimal oder hex. Wenni
hat den Wert zehn, dann ist das Wert zehn ist ini
, nicht um eine Darstellung der zehn in dezimal oder hex.Natürlich, wenn Sie display die Wert gespeichert in
i
Sie haben die Wahl, wie darstellen es. Sie kann zeigen Sie Sie alsten
oder10
,| | | | | | | | | | |
oder was auch immer.Zu und Sie haben einen string, der eine Darstellung der Wert "zehn" in hex, und Sie müssen möglicherweise zu weisen, dass Wert auf eine variable. Das erfordert die Umwandlung von einer Darstellung des Werts, den Sie repräsentiert.
Es gibt input-und output-Funktionen, die input-und out - Werte in verschiedenen Darstellungen.
Ich vermute, das Sie konvertieren möchten Ziffern gespeichert in strings, Zeichen, Ganzzahlen, z.B. Charakter
'9'
integer9
.Um dies zu tun:
Dass es funktionieren wird, unabhängig davon, ob Sie einen computer verwenden ASCII-oder EBCDIC -...
In diesem Fall, Sie nicht zu benötigen scheinen
atoi
oderitoa
(weder wird alles tun, sehr nützlich, zum BeispielJ
). Sie wollen einfach etwas wie:In der Theorie ist das nicht tragbar -- wenn es gibt keine chance, den code auf einem Rechner mit EBCDIC (d.h., ein IBM-oder kompatibler mainframe) möchten Sie so etwas wie
'z'-'a'
als die Größe der Arrays, da es nicht genau 26 (EBCDIC enthält einige andere Zeichen eingefügt zwischen einigen Buchstaben, so sind die Buchstaben in Ordnung sind, aber nicht zusammenhängend).Wahrscheinlich noch wichtiger ist, wenn Sie wollen, um Unterstützung von anderen Sprachen als Englisch, die Dinge ändern sich ganz in Eile-Sie haben möglicherweise eine unterschiedliche Anzahl von Buchstaben als 26, vielleicht haben Sie nicht alle zusammenhängend sein, etc. Für einen solchen Fall Ihr basic-design ist wirklich das problem. Anstatt der Festsetzung einer Zeile code, die Sie wahrscheinlich benötigen, um die Neugestaltung fast vollständig.
Als beiseite, es ist jedoch eine ziemlich gute chance, dass eine verknüpfte Liste ist nicht eine sehr gute Wahl hier.