gpt4 book ai didi

c - 在 C 中将 "char"转换为 "int"的逻辑

转载 作者:行者123 更新时间:2023-11-30 18:34:32 25 4
gpt4 key购买 nike

大家!

请帮我理解以下问题...所以我将有一个音符的字符串类型输入,看起来像“A5”或“G#2”或“Cb4”等。我需要提取一个 Octave 索引,即最后一个数字“5”或“2” ”或“4”...提取后我需要它作为 int 类型。

所以我这样做了:

string note = get_string("Input: ");
int octave = atoi(note[strlen(note) - 1]);
printf("your octave is %i \n", octave);

但它给了我一个错误“错误:不兼容的整数到指针转换将'char'传递给'const char *'类型的参数;使用& [-Werror,-Wint-conversion]获取地址”

然后我尝试从函数中剔除数学,并这样做了:

int extnum = strlen(note) - 1;
int octave = atoi(note[extnum]);

效果不太好。所以我对 atoi 函数进行了研究,但我不明白......

  1. ATOI 需要一个字符串 (CHECK)
  2. 将其转换为整数,而不是 ASCII 含义 (CHECK)
  3. atoi 函数库 (CHECK)

我所做的基本上是询问“取出该字符串的第 n 个字符并将其设为 int”。

经过谷歌搜索一段时间后,我发现了另一个代码示例,其中有人使用带有符号“&”的 atoi。 所以我这样做了:

int octave = atoi(&note[strlen(note) - 1]);

它成功了!但我不明白为什么它与 & 符号一起工作,而没有它就不起作用......因为它总是在没有它的情况下工作!我有一百万次给出像“5”之类的单字符字符串,只是使用 atoi 并且它工作得很好......

请帮助我,为什么在这种情况下它表现得如此奇怪?

最佳答案

C 没有原生字符串类型。字符串通常表示为 char 数组或指向 char 的指针。

假设 string 只是 char * 的类型定义。

如果 note 是一个字符数组,则 note[strlen(note)-1] 只是最后一个字符。由于atoi需要一个指向char的指针(必须以null结尾),因此您必须传递char的地址而不是值。

将一个字符数字转换为 int 的任务也可以更容易地解决:

int octave = note[strlen(note) - 1] - '0';

关于c - 在 C 中将 "char"转换为 "int"的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com