c - int/char 数组/字符串之间的区别

标签 c arrays string char int

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

我无法理解 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”。由于数字是线性编码的,因此这将起作用(对于单个数字)。对于更大的数字,您应该使用 atoistrtol来自 stdlib.h

关于c - int/char 数组/字符串之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18200931/

相关文章:

java - JOptionPane 从 showOptionDialog 获取字符串

c++ - 如何获得基于 c 函数的差异?

c# - Python 从 c# 转换 Calculating CRC8 from 4/5 bytes frame

c++ - 两次释放内存

javascript - 连接 vs 插入 react js

C 比较数组元素与字符串

java - 查找字符串中不在双引号之间的字符

c - 有没有单行初始化字符串的方法?

javascript - 从数组中查找最小值

Python 列表 - True/False 前两个元素?