首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用atoi填充整型数组

使用atoi填充整型数组
EN

Stack Overflow用户
提问于 2013-03-08 06:58:57
回答 4查看 6.3K关注 0票数 5

第一次在这里提问。如果已经有关于这个的帖子,我很抱歉,但我已经搜索了几次,没有找到我想要的东西。我对C语言非常陌生,正在为我的微控制器系统课程做一些家庭作业。在进入嵌入式C语言之前,我们目前正在做一些简单的练习,我正在尝试编写一个程序,它将接受一行由逗号分隔的10个数字组成的文本,并用它填充一个int数组。作为一个提示,我们被告知要使用substringatoi。我想我已经接近正确了,但是我不能让它正确地输出我的数字。

另外,我也不是在寻找填鸭式的答案。现在,一些提示就足够了。在寻求解决方案之前,我想试着自己弄清楚。

下面是我的代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int a[10];
    char str[] = {1,2,3,4,5,6,7,8,9,10}; //contains string of numbers
    int i;
    puts("This prints out ten numbers:");

    for (i = 0; i < 10; i++)
    {
        a[i] = atoi(str);
        printf("%d", a[i]);
            //i'm guessing the problem lies in one of the above two lines
    }
    return 0;
}

这将输出以下内容:

代码语言:javascript
复制
This prints out ten numbers:
0000000000

感谢任何能提供帮助的人!克里斯

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-08 07:07:58

您说必须使用一行用逗号分隔的文本行,但是您实际上声明了一个包含10个(二进制)整数的char数组。要将其放入字符串中,您只需执行以下操作:

char str[] = "1,2,3,4,5,6,7,8,9,10";

然后,您将需要某种方法来处理此字符串,以将每个数字取出并放入int数组中。

票数 3
EN

Stack Overflow用户

发布于 2013-03-08 07:20:36

首先,您应该声明一个string,如下所示:

代码语言:javascript
复制
char str[] = {"1,2,3,4,5,6,7,8,9,10"};

"把数字变成了一个完整的字符串。接下来,您需要对它们进行标记化,并使用<string.h>库,该库在这种情况下将非常方便。

下面是如何进行标记化的:

首先定义一个令牌缓冲区:

代码语言:javascript
复制
char* token;

token = strtok(str,",");   //think of it as substring, the part of the str before the comma
for (i = 0; i < 10; i++)
{
    a[i] = atoi(token);
    printf("%d\t", a[i]);
            //i'm guessing the problem lies in one of the above two lines
    token = strtok(NULL, ","); //this line is also required for tokenizing the next element
}

使用strtok()函数,您可以分隔逗号之间的元素,并获得数字字符串。使用atoi()函数将它们转换为整数并打印出来。你可以通过see this referencestrtok()函数进行更好的理解。

票数 1
EN

Stack Overflow用户

发布于 2013-03-08 07:01:10

问题在于如何创建字符串。

请原谅我之前的回答,我误解了你的问题:

简单地说,声明应该是这样的:

代码语言:javascript
复制
char str[] = "1,2,3,4,5,6,7,8,9, 10, 12";

接下来,可以使用strtok将字符串分隔成字符串数组,省略分隔符(在本例中是逗号),然后将数组成员传递给atoi

那么,为什么你的代码不能工作呢?

首先,字符应该用撇号括起来,否则编译器会将您传递的数字直接作为ASCII值。

其次,C中的数组如下所示:char str[] = {'1', '2', '3', '4', '5'};不表示逗号分隔的字符串,这些逗号分隔数组成员,每个成员都在自己的索引中,而不是作为一个完整的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15283473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档