2

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

4 回答 4

3

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

我一直在四处寻找,我似乎发现的只是如何将字符串中的数字字符转换为整数,而不是字母字符

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

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

这种误解的一个典型例子是这样的问题:“我有一个i具有十进制值的变量。我怎样才能让它以十六进制存储一个值?” 当然这没有意义,它存储,十六进制和十进制是表示形式。如果你有十辆汽车,你有十辆汽车,而不是十进制或十六进制。如果i值为 10,则值为10 i,而不是 10 的十进制或十六进制表示。

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

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

有输入和输出函数以各种表示形式输入和输出

于 2013-02-22T17:59:22.473 回答
3

当您将 i 设置为第一个字符的值时,您将获得 ASCII 值。所以 i 不在你的 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 作为缩减值。

于 2013-02-22T18:06:46.340 回答
1

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

为此:

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

无论您的计算机是使用 ASCII 还是 EBCDIC,这都将起作用...

于 2013-02-22T18:02:21.270 回答
0

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

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

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

可能更重要的是,如果您想支持英语以外的其他语言,事情会完全改变——您的字母数量可能与 26 个不同,它们可能并不都是连续的,等等。对于这种情况,您的基本设计是真的是问题。您可能需要几乎完全重新设计,而不是修复那一行代码。

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

于 2013-02-22T18:00:34.307 回答