我是C的初学者。 我有这种格式的字符数组,例如“12 23 45 9”。 如何将它转换为int数组{12,23,45,9}? 在此先感谢。将char数组转换为int数组?
4
A
回答
5
0
您需要stdlib.h中
//get n,maxDigits
char** p = malloc(sizeof(char*) * n);
int i;
for(i=0;i<n;i++)
p[i] = malloc(sizeof(char) * maxDigits);
//copy your {12,23,45,9} into the string array p, or do your own manipulation to compute string array p.
int* a = malloc(sizeof(int) * n);
int i;
for(i=0;i<n;i++)
a[i] = atoi(p[i]);
0
您可以通过以下方法计算单个数字(但不会将它们转换成整数):
注意我用的一个int迭代循环来使其可读。通常情况下你只递增字符指针本身:
void PrintInts(const char Arr[])
{
int Iter = 0;
while(Arr[Iter])
{
if((Arr[Iter] >= '0') && (Arr[Iter]) <= '9')
{
printf("Arr[%d] is: %d",Iter, (Arr[Iter]-'0'));
}
}
return;
}
以上将被扣除0-9集的最低ASCII表示的ASCII数字转换回一个int数。因此,例如,如果'0'表示为40(不是),并且'1'表示为41(不是),则41-40 = 1.
要获得想要的结果,使用strtok的和的atoi:
//Assumes Numbers has enough space allocated for this
int PrintInts(const int Numbers[] const char Arr[])
{
char *C_Ptr = strtok(Arr," ");
int Iter = 0;
while(C_Ptr != NULL)
{
Numbers[Iter] = atoi(C_Ptr);
Iter++;
C_Ptr = strtok(NULL," ");
}
return (Iter-1); //Returns how many numbers were input
}
-1
什么:
const char *string = "12 23 45 9";
int i, numbers[MAX_NUMBERS]; //or allocated dynamically
char *end, *str = string;
for(i=0; *str && i<MAX_NUMBERS; ++i)
{
numbers[i] = strtol(str, &end, 10);
str = end;
};
虽然它也许您在数字阵列获得尾随0如果字符串的最后一个数字后的空白。
+0
@ down-voter而downvote是由于......? –
1
传统但不赞成使用的方法是使用strtok()
。现代替代品是strsep()
。这里有一个例子直客手册页strsep()
:
char **ap, *argv[10], *inputstring;
for (ap = argv; (*ap = strsep(&inputstring, " \t")) != NULL;)
if (**ap != '\0')
if (++ap >= &argv[10])
break;
,打破inputstring成使用所提供的分隔符(空格,制表符),并在片迭代件。您应该可以修改上述内容,使用atoi()
将每个片段转换为int。 strsep()
的主要问题是它修改了输入字符串,因此不是线程安全的。
如果您知道输入的字符串会始终包含相同数量的整数的,另一种方法是使用sscanf()
阅读所有的整数一气呵成:
char *input = "12 23 45 9";
int output[5];
sscanf(inputstring, "%d %d %d %d %d", &output[0], &output[1], &output[2], &output[3], &output[4]);
相关问题
- 1. 将char数组转换为单个int?
- 2. 将Int转换为Char数组
- 3. 将char数组转换为int数组与空间
- 4. 使用Golang将int数组转换为char数组?
- 5. 将TCHAR数组转换为char数组
- 6. Java char数组转换为int
- 7. 将int数组更改为char数组
- 8. 将数组从unsigned char *转换为char *
- 9. 如何将int数组转换为int?
- 10. 如何将int数组转换为可为null的int数组?
- 11. C - int数组到char *转换
- 12. 用char数组填充char数组(char数组到int数组)
- 13. 将int转换为C中的char数组
- 14. 将int转换为具有选定格式的char数组
- 15. 如何将char数组转换为C中的int?
- 16. 指针并将char数组转换为int
- 17. 在Java中将int的2d数组转换为char和string
- 18. C++ - 将8个位置的int数组转换为char
- 19. 将size_t转换为int来声明char数组的大小
- 20. 如何使用atoi()将char数组的元素转换为int?
- 21. 将char数组转换为NSString对象
- 22. 将int **数组转换为不同大小/构图的char **数组
- 23. 无法将参数'int'转换为'char'
- 24. 将int转换为字节数组BufferOverflowException
- 25. ruby rails将params转换为int数组
- 26. 将int转换为字符串数组
- 27. 将字符串转换为int数组
- 28. 无法将Int数组转换为ASCII
- 29. C++将int转换为字符数组?
- 30. 如何将int转换为Byte数组?
是,BU它分裂我的数组{1,2,3,4,5,9}并继续循环。如何结束循环? – Brdjo
显示你有什么,所以它可以修复。 –