将字符串序列拆分为整数

时间:2016-10-01 03:21:19

标签: 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, 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;
}

哪个输出:

1 2 3 4 5

我能做到更像C吗?

2 个答案:

答案 0 :(得分:2)

为了便于阅读,您可以将48替换为'0'

您可以将所有循环更改为循环,直到string_size像第一个循环一样,无需为每个循环更改方法。

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

但除此之外,它非常简单并且有效。

答案 1 :(得分:2)

我看到的奇怪的事情,这本身并不是一个问题,是你以三种不同的方式计算字符串/数组的长度:

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;
}