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

时间:2013-02-22 17:51:31

标签: c++ string integer ascii letters

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

4 个答案:

答案 0 :(得分:3)

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

  

我一直在寻找,我似乎找到的就是如何将字符串中的数字字符转换为整数,而不是字母

没有区别。无论如何,字符总是由整数表示。这只是一个代表问题。只需按照您想要的方式呈现价值。

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

这种误解的一个典型例子是“我有一个变量i,它有一些十进制值。我怎样才能让它以十六进制存储一个值?”当然这没有意义,它存储,十六进制和十进制是表示。如果您有十辆汽车,那么汽车中有十辆汽车,而不是十进制或十六进制。如果i的值为10,则十位于i,而不是十进制或十六进制的十位表示。

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

你可能有一个字符串,其中“十”的表示十六进制,你可能需要指定变量。这需要从表示转换为它所代表的值。

有各种表示输入和输出的输入和输出功能。

答案 1 :(得分:2)

当您将i设置为第一个字符的值时,您将获得ASCII值。 所以我超出你的0-25范围:见男子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为减少的值。

答案 2 :(得分:1)

我怀疑你想将存储在字符串中的数字作为字符转换为整数,例如字符'9'到整数9

为此:

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

无论您使用的是使用ASCII还是使用EBCDIC的计算机,都可以使用

答案 3 :(得分:0)

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

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

理论上说这是不可移植的 - 如果在使用EBCDIC的机器上使用代码的任何机会(即IBM或兼容的大型机),你会想要使用'z'-'a'这样的大小您的数组,因为它不会完全是26(EBCDIC包括在某些字母之间插入的一些其他字符,所以字母按顺序但不连续)。

可能更重要的是,如果你想支持英语之外的其他语言,事情就会匆忙改变 - 你可能会有不同数量的字母而不是26,它们可能并非都是连续的等等。对于这种情况你的基本设计确实是问题所在。而不是修复那一行代码,你可能需要几乎完全重新设计。

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