繁体   English   中英

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

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

我目前正在做一个项目,我需要创建两个将用于包含字符串的数据结构。 其中一个必须是链表的一种形式,我已经被要求将单词分隔成单独的字母表中的单独列表。 我需要考虑效率,因此我有一个大小为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语句集

我认为您将值与表示混淆。 “十”,“ 10”和“ 1 1 1 1 1 1 1 1 1 1 1”都是相同的值,只是表示方式不同。

我一直在搜索,似乎只发现了如何将字符串中的数字字符转换为整数而不是字母字符

没有区别。 无论如何,字符始终由整数表示。 这只是代表问题。 只需按照您想要的方式显示值即可。

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

关于这种误解的一个典型例子是这样的问题:“我有一个变量i ,其值以十进制表示。如何使它以十六进制形式存储值?” 当然这没有意义,它存储 ,十六进制和十进制是表示 如果您有十辆车,那么您有十辆车 ,而不是十进制或十六进制。 如果i的值为十,则十在i ,而不是以十进制或十六进制表示十。

当然,当您显示存储在i值时 ,您必须选择如何表示它。 您可以将其显示为ten10 | | | | | | | | | | | | | | | | | | | | | | , 管他呢。

而且您可能有一个字符串,以十六进制表示 “十”,并且您可能需要将该分配给变量。 这需要从表示形式转换为它表示的值。

有输入和输出功能,可以输入和输出各种表示形式的

将i设置为第一个字符的值时,将获得ASCII值。 因此,我不在您的0-25范围内:请参阅man ascii您可以通过减去第一个alaphabet ascii字母来减少它。 (请谨慎处理)

 std::string   s("zoro");
 int   i = s[0];

 std::cout << "Ascii value : " << i << " Reduced : " << i - 'a' << std::endl;

如预期的那样,将产生ASCII值'z'= 112和25的缩减值。

我怀疑你想将存储在字符串中的数字作为字符转换为整数,例如字符'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个不同,它们可能并不连续,等等。在这种情况下,您的基本设计是真的是问题。 您可能需要几乎完全重新设计,而不是修复那一行代码。

然而,顺便说一句,链接列表在这里不是一个很好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM