C++将字符串转换/强制转换为整数值(ASCII)

C++ Converting/casting String letters to integer values (ASCII)

本文关键字:转换 整数 ASCII 字符串 C++      更新时间:2023-10-16

我目前正在做一个项目,需要创建两个用于包含字符串的数据结构。其中一个必须是链表的形式,我已经习惯于将单词分成字母表中每个字母的单独列表。我需要考虑效率,所以我有一个26大小的Head指针数组,我想把单词的第一个字符转换成整数,这样我就可以把它放进下标中,比如:

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

我一直在四处搜索,我所找到的只是如何将字符串中的数字字符转换为整数,而不是字母字符,我想知道我到底如何在不使用一组庞大而丑陋的if语句

的情况下实现这一点

将i设置为第一个字符的值时,将获得ASCII值。所以我超出了你的0-25范围:见man ascii您可以通过减去第一个阿拉伯字母来减少它。(小心处理案件(

 std::string   s("zoro");
 int   i = s[0];
 std::cout << "Ascii value : " << i << " Reduced : " << i - 'a' << std::endl;

它产生ASCII值'z'=112和25作为减少的值,正如预期的那样。

我认为您混淆了值和表示。"十"10"answers"11 11 11 11 1 1 1 1"都是相同的值,只是表示方式不同。

我一直在四处搜索,我所找到的只是如何将字符串中的数字字符转换为整数,而不是字母字符

没有区别。无论如何,字符总是用整数表示。这只是一个代表性的问题。只要以你想要的方式呈现价值。

顺便说一句,这是程序员必须理解的一个关键概念。因此,花点时间思考一下是值得的。

这种误解的一个经典例子是这样一个问题:"我有一个变量i,它有一些十进制值。我如何使它以十六进制存储值?"当然,这没有意义,它存储,十六进制和十进制是表示。如果你有十辆车,你就有十辆,而不是十进制或十六进制。如果i的值为10,则10在i中,而不是以十进制或十六进制表示的10。

当然,当显示存储在i中的时,您必须选择如何表示。您可以将其显示为ten10| | | | | | | | | | |或其他形式。

您可能有一个字符串,它具有表示形式(十六进制("ten",您可能需要将的值赋值给一个变量。这需要从表示转换为它所表示的值。

输入和输出函数在各种表示中输入和输出

我怀疑您想将字符串中以字符形式存储的数字转换为整数,例如字符'9'转换为整数9

为了做到这一点:

char c = '9';
int x = c - '0';

无论你的计算机是使用ASCII还是EBCDIC,这都会起作用。。。

在这种情况下,您似乎不需要atoiitoa(例如,J都不会做任何非常有用的事情(。你只想要这样的东西:

int i = tolower(s[0])-'a';

从理论上讲,这是不可移植的——如果代码有可能在使用EBCDIC的机器(即IBM或兼容的大型机(上使用,您会希望使用类似'z'-'a'的东西作为数组的大小,因为它不会正好是26(EBCDIC包括插入在一些字母之间的一些其他字符,因此字母是有序的,但不是连续的(。

也许更重要的是,如果你想支持英语以外的语言,事情会很快发生变化——你可能有26个不同的字母,它们可能不都是连续的,等等。在这种情况下,你的基本设计才是真正的问题。与其修复那一行代码,您可能需要几乎完全重新设计。

然而,顺便说一句,链表很有可能不是一个很好的选择。