C 将字符串序列拆分为整数

C 将字符串序列拆分为整数,c,C,如何拆分字符串: char *mystring = "12345" 转换为如下所示的整数数组: [1, 2, 3, 4, 5] 我尝试过下面的代码,但我不完全确定它是否可靠,我认为它很容易被破坏。代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char *mystring = "12345"; int string_size

如何拆分字符串:

char *mystring = "12345"
转换为如下所示的整数数组:

[1, 2, 3, 4, 5]
我尝试过下面的代码,但我不完全确定它是否可靠,我认为它很容易被破坏。代码如下:

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

int
main(void) {
    char *mystring = "12345";
    int string_size, i, length;

    string_size = strlen(mystring);

    int values[string_size];

    for (i = 0; mystring[i] != '\0'; i++) {
        values[i] = mystring[i] - 48;
    }

    length = sizeof(values)/sizeof(*values);

    for (i = 0; i < length; i++) {
        printf("%d ", values[i]);
    }

    return 0;
}

有没有一种更像C的方法可以做到这一点?

为了可读性,您可以用
'0'
替换
48

您可以将所有循环更改为循环,直到
string\u size
与第一个循环一样,无需更改每个循环的方法

最后,如果要在本地函数之外的任何位置返回该数组,可能应该
malloc()
it,而不是使用本地/堆栈变量


但除此之外,它非常简单,而且可以工作。

我看到的一件奇怪的事情,它本身不是一个问题,就是用三种不同的方法计算字符串/数组的长度:

string_size = strlen(mystring);

for (i = 0; mystring[i] != '\0'; i++) {

length = sizeof(values)/sizeof(*values);
只要一种方法就足够了:

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

int main(void) {
    char *mystring = "12345";

    size_t length = strlen(mystring);

    int values[length];

    for (int i = 0; i < length; i++) {
        values[i] = mystring[i] - '0';
    }

    for (int i = 0; i < length; i++) {
        printf("%d ", values[i]);
    }

    printf("\n");

    return 0;
}
#包括
#包括
内部主(空){
char*mystring=“12345”;
长度=strlen(mystring);
int值[长度];
for(int i=0;i
如果你的代码“正常工作”,你可以在适当的地方提出改进或意见问题。“有没有一种更像C的方法可以做到这一点?”-是的:不要使用幻数!为什么是
48
,而不是
'0'
?两者都是整数。
int main(void){const char*mystring=“12345”;const char*ptr=mystring;while(*ptr!='\0'){putchar(*ptr++);if(*ptr!='\0')putchar('';}putchar('\n');返回0;}
?甚至
intmain(void){puts(“12345”);return 0;}
我不明白我在问什么,有什么不清楚。我知道我的代码是有效的,但我确信看看是否有更简单的方法可以做到这一点。就像一个特殊的c函数可以处理这个问题。将
'0'
交换为
48
不仅仅是为了可读性<代码>'0'仅在ASCII和兼容字符集中具有数值
48
,并且在现实世界的字符集中,
'0'
具有不同的数值。所有标准化字符集都有从
'0'
'9'
的顺序数字,因此减去
'0'
是将打印数字转换为数值的可靠方法。谢谢,是的,我应该使用
malloc
,但是我不认为这是必要的,因为我在main中调用它,并且数组的大小是固定的。谢谢。我仍然习惯C,但这很有帮助。
#include <stdio.h>
#include <string.h>

int main(void) {
    char *mystring = "12345";

    size_t length = strlen(mystring);

    int values[length];

    for (int i = 0; i < length; i++) {
        values[i] = mystring[i] - '0';
    }

    for (int i = 0; i < length; i++) {
        printf("%d ", values[i]);
    }

    printf("\n");

    return 0;
}