gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:56:24 25 4
gpt4 key购买 nike

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

我无法理解 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/

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