我还是论坛的新手,所以我提前为论坛的礼仪问题道歉。
我无法理解 int
数组和 char
数组之间的区别。
最近写了一个Project Euler问题的程序,原来是用char
数组来存储一串数字,后来调用具体的字符,尝试用int
对它们进行操作以找到产品。当我使用 char 字符串时,我得到了一个大得离谱的产品,显然不正确。即使我将我认为会被编译为字符 (str[n]
) 的内容转换为一个内联整数 ((int)str[n]
),它确实做到了完全一样的东西。只有当我实际使用整数数组时它才起作用。
代码如下
对于 char
字符串
char str[21] = "73167176531330624919";
这没有用。我得到了大约 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};
这是有效的。我也取消了在线类型转换。
任何关于为什么这些东西有效/无效的解释,以及任何可以导致更好地理解这些想法的内容,我们都将不胜感激。有用的东西的链接也是如此。我自己研究了很多字符串、数组和指针(我在高中时自学),但这些概念仍然令人困惑。
附带问题,C 中的字符串是自动存储为数组还是只可能这样做?
最佳答案
详细说明 WhozCraig 的回答,您遇到的问题与字符串无关,而与单个字符有关。
C 中的字符串通常存储为字符数组(注意末尾存在空终止符)。
字符本身在称为 ascii 的系统中编码,该系统为英语(仅)中使用的字符分配 0 - 127 之间的代码。因此,“7”不是存储为 7,而是存储为 7 的 ascii 编码,即 55。
我想现在您可以明白为什么您的产品变得如此庞大了。
一种优雅的修复方法是转换
int num = (int) str[n];
到
int num = str[n] - '0';
//thanks for fixing, ' ' is used for characters, " " is used for strings
此解决方案从字符的 ascii 代码中减去 0 的 ascii 代码,比如“7”。由于数字是线性编码的,因此这将起作用(对于单个数字)。对于更大的数字,您应该使用 atoi或 strtol来自 stdlib.h
关于c - int/char 数组/字符串之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200931/