【问题标题】:Meaning of a C statement involving char arrays涉及 char 数组的 C 语句的含义
【发布时间】:2014-02-13 04:13:00
【问题描述】:

我正在研究一个项目的算法,我遇到了一些我认为可能有用的代码。但是,当我尝试阅读代码时,我在理解代码中的语句时遇到了一些困难。这是代码。

int firstWord[MAX_WORD_SIZE] = {0}, c = 0;

while (word1[c] != '\0') //word1 is char[] sent as a parameter
{
  firstWord[word1[c]-'a']++;
  c++;
}

我理解(我希望是正确的)第一行是设置一个最大大小的整数数组,并将元素初始化为零,同时使初始计数器值“c”为零。

我知道 while 循环正在循环遍历 word1[] 数组的所有字符,直到到达最后一个字符 '\0'

在线困惑firstWord[word1[c]-'a']++; word1[c] 应该给出一个字符,那么 -'a' 做什么呢?这是否将 char 转换为允许您访问 firstWord[] 数组的元素并使用 ++ 递增的整数?如果有,word1[c]-'a' 给出的是哪个元素或整数?

【问题讨论】:

  • This table 可能会帮助您更好地理解该表达式。
  • 查看表中字母旁边标有dec 的列。然后考虑正在完成的数学运算(在这种情况下是减法)。
  • 谢谢,对不起,我删除了我的评论,因为我在问你之后就发现了我的问题。感谢您的帮助!

标签: c arrays char


【解决方案1】:

word1[c]-'a'表示word1第c个位置的字符与'a'的整数值之差。基本上它计算一个单词中字母出现的次数。

所以如果 word1[c] 是 'b',那么 word1[c]-'a' 的值将是 ('b' - 'a') = 1。所以 'b' 在word 会加 1。

【讨论】:

    【解决方案2】:

    这是一个计算单词中字母az 的数量的程序。这里的重点是,'a' - 'a'的值为0'b' - 'a'的值为1等。

    例如,如果word1[c] 是字母'd',那么'd' - 'a' 就是3,所以它会增加firstWord[3]。当单词被逐字符迭代时,firstWord[3] 包含单词中字母'd' 的数量。

    【讨论】:

    • 感谢您的明确答复,作为后续问题,最好将我的数组 firstWord[] 设置为初始大小为 26,而不是我的 MAX_WORD_SIZE 恰好30岁?
    • @JoshEngelsma 除非还计算 ASCII 中 'z' 后面的一些字符,否则我认为您是对的。
    【解决方案3】:

    这段代码似乎在计算字母

    1 那么 -'a' 有什么作用呢?

    如果 word1[c] 是 'a' 那么 word1[c]-'a' 是 0

    2 。这是否将 char 转换为允许您访问 firstWord[] 数组的元素并使用 ++ 递增的整数?

    是的,是整数提升

    3 .如果是的话,哪个元素或整数由word1[c]-'a'给出

    如果 word1[c] 是 'a' 那么 word1[c]-'a' 是 0

    【讨论】:

    • 嗨,请参阅我之前对此答案的编辑以获取固定格式降价。
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多