int/char数组/字符串之间的差异

Cha*_*les 5 c arrays string int char

我还是新来的论坛,所以我提前为论坛礼仪问题道歉.

我无法理解int数组和char数组之间的差异.

我最近编写了一个Project Euler问题的程序,该程序最初使用一个char数组来存储一串数字,后来调用了特定的字符并试图int对它们使用操作来查找产品.当我使用char字符串时,我得到了一个非常大的产品,显然不正确.即使我将我认为将编译为character(str[n])的内容转换为整数in-line((int)str[n]),它也完全相同.只有当我实际使用整数数组时才有效.

代码如下

对于char字符串

char str[21] = "73167176531330624919";
Run Code Online (Sandbox Code Playgroud)

这没用.我得到了大约1.5万亿的答案,答案应该是大约40k.

对于int阵列

int str[] = {7,3,1,6,7,1,7,6,5,3,1,3,3,0,6,2,4,9,1,9};
Run Code Online (Sandbox Code Playgroud)

这是做了什么工作.我也脱掉了直列式铸造.

任何解释为什么这些事情有效/无效以及任何能够更好地理解这些想法的事情都将受到赞赏.有用的东西的链接也是如此.我自己研究了很多字符串,数组和指针(我在高中时就是自学),但这些概念仍然令人困惑.

边题,是C中的字符串自动存储为数组还是可以这样做?

Kar*_*k T 4

为了详细说明 WhozCraig 的答案,您遇到的麻烦与字符串无关,而是与单个字符有关。

C 中的字符串大体上存储为字符数组(但需要注意的是末尾存在空终止符)。

字符本身在称为 ascii 的系统中进行编码,该系统为英语中使用的字符分配 0 - 127 之间的代码(仅)。因此,“7”不是存储为 7,而是存储为 7 的 ascii 编码,即 55。

我想现在你可以明白为什么你的产品变得这么大了。

一种优雅的解决方法是转换

int num = (int) str[n];
Run Code Online (Sandbox Code Playgroud)

int num = str[n] - '0';  
//thanks for fixing, ' '  is used for characters, " " is used for strings
Run Code Online (Sandbox Code Playgroud)

此解决方案从字符的 ascii 代码中减去 0 的 ascii 代码,例如“7”。由于数字是线性编码的,因此这将起作用(对于单位数字)。对于更大的数字,您应该使用atoistrtolstdlib.h