将char数组转换为int数组(C)[关闭]

问题描述 投票:-1回答:3

我有一个char数组“2468”,我想转换为int数组,以便于数学操作。但是当我运行项目时,它只是说“核心转储”错误。我不知道是什么原因引起的......

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main() {
    int i = 0;
    char charArray[] = "2468";
    int intArray[20];
    for (i = 0; i < strlen(charArray); ++i) {
        intArray[i] = atoi(charArray[i]);
        printf("%d", intArray[i]);
    }
    return 0;
}
c arrays char atoi
3个回答
1
投票

你应该阅读警告。他们随时为您提供帮助:

b.c: In function ‘main’:
b.c:11:37: warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [-Wint-conversion]
         intArray[i] = atoi(charArray[i]);
                            ~~~~~~~~~^~~
In file included from b.c:4:
/usr/include/stdlib.h:104:30: note: expected ‘const char *’ but argument is of type ‘char’
 extern int atoi (const char *__nptr)
                  ~~~~~~~~~~~~^~~~~~

但除此之外,为什么会让事情复杂化?既然你想要复制数字而不是数字,那么就这样做:

for (i = 0; i < strlen(charArray); ++i) {
    intArray[i] = charArray[i] - '0';
}

如果您想防止错误,请先查看isdigit(charArray[i])。请记住,atoi将在出错时返回0,因此如果得到0,您将知道转换是否有效。


1
投票

您需要将char中的每个charArray转换为字符串以传递给atoi

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main() {
    int i = 0;
    char charArray[] = "2468";
    int intArray[20];
    for (i = 0; i < strlen(charArray); ++i) {
        // Convert character to string
        char convert[2] = {charArray[i], 0};
        // Pass string to atoi
        intArray[i] = atoi(convert);
        printf("%d", intArray[i]);
    }
    return 0;
}

0
投票
int main() {
    int i = 0;
    char charArray[] = "2468";
    int intArray[20];
    while(charArray[i])
    {
        intArray[i] = charArray[i] - '0');
        printf("%d", intArray[i++]);
    }
    return 0;
}

两个函数:首先将字符串中的字符转换为数字值,第二个将表字符串转换为字符串转换为数字。

void convert_charsToDigits(const char *str, int *arr)
{
    int c;
    while(*str)
    {
        if(!isdigit(c = *str++)) continue;
        *arr++ = c - '0';
    }
}

void convert_stringsToInts(const char **str, int *arr)   //Takes NULL terminated string table
{
    while(*str)
    {
        *arr++ = atoi(*str++);
    }
}

用法

char *cstr = "696"
char *str = {"2345", "455667", NULL};
int arr[5];

convert_charsToDigits(cstr, arr);
convert_stringsToInts(str, arr);
© www.soinside.com 2019 - 2024. All rights reserved.