如何拆分字符串:
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吗?
答案 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;
}