Tôi đang có một mảng số nguyên nói int example[5] = {1,2,3,4,5}
. Bây giờ tôi muốn chuyển đổi chúng thành mảng ký tự bằng cách sử dụng C, không phải C++. Tôi làm nó như thế nào?Chuyển đổi mảng int thành mảng char
Trả lời
Tùy thuộc vào những gì bạn thực sự muốn, có rất nhiều câu trả lời cho câu hỏi này:
int example[5] = {1,2,3,4,5};
char output[5];
int i;
bản sao Straight ký tự điều khiển cho ASCII 1 - 5
for (i = 0 ; i < 5 ; ++i)
{
output[i] = example[i];
}
ký tự '1' - '5 '
for (i = 0 ; i < 5 ; ++i)
{
output[i] = example[i] + '0';
}
chuỗi đại diện 1 - 5.
char stringBuffer[20]; // Needs to be more than big enough to hold all the digits of an int
char* outputStrings[5];
for (i = 0 ; i < 5 ; ++i)
{
snprintf(stringBuffer, 20, "%d", example[i]);
// check for overrun omitted
outputStrings[i] = strdup(stringBuffer);
}
Nếu số nguyên lớn hơn '9' thì sao? Số nguyên trên '10' sẽ không được chuyển đổi sang định dạng char. – Stallman
Bạn có thể chuyển đổi một đơn chữ số-số nguyên vào nhân vật tương ứng sử dụng biểu thức này:
int intDigit = 3;
char charDigit = '0' + intDigit; /* Sets charDigit to the character '3'. */
Lưu ý rằng đây chỉ là hợp lệ, tất nhiên, đối với một con số. Ngoại suy ở trên để làm việc chống lại mảng nên được thẳng về phía trước.
Bạn cần tạo mảng, vì sizeof(int)
là (gần như chắc chắn) khác với sizeof(char)==1
.
Có vòng lặp mà bạn làm char_example[i] = example[i]
.
Nếu những gì bạn muốn là để chuyển đổi một số nguyên vào một chuỗi bạn chỉ có thể tổng hợp số nguyên của bạn để '0'
nhưng chỉ khi bạn chắc chắn rằng số nguyên của bạn là từ 0 đến 9, nếu không bạn sẽ cần sử dụng một số tinh vi hơn như sprintf
.
#include <stdio.h>
int main(void)
{
int i_array[5] = { 65, 66, 67, 68, 69 };
char* c_array[5];
int i = 0;
for (i; i < 5; i++)
{
//c[i] = itoa(array[i]); /* Windows */
/* Linux */
// allocate a big enough char to store an int (which is 4bytes, depending on your platform)
char c[sizeof(int)];
// copy int to char
snprintf(c, sizeof(int), "%d", i_array[i]); //copy those 4bytes
// allocate enough space on char* array to store this result
c_array[i] = malloc(sizeof(c));
strcpy(c_array[i], c); // copy to the array of results
printf("c[%d] = %s\n", i, c_array[i]); //print it
}
// loop again and release memory: free(c_array[i])
return 0;
}
Đầu ra:
c[0] = 65
c[1] = 66
c[2] = 67
c[3] = 68
c[4] = 69
Câu trả lời của bạn sẽ chỉ hoạt động với số lên tới 999, sau đó nó sẽ bắt đầu cắt xén chữ số - INT_MAX cho số nguyên bổ sung 32 bit 2 là 2147483647, thay vì nhiều hơn 3 chữ số (một trong bốn số của bạn được lấy bằng ''\ 0 '') – JeremyP
@ JeremyP Tôi hiểu ý của bạn là gì, cảm ơn bạn. – karlphillip
Trong C tinh khiết Tôi sẽ làm điều đó như thế này:
char** makeStrArr(const int* vals, const int nelems)
{
char** strarr = (char**)malloc(sizeof(char*) * nelems);
int i;
char buf[128];
for (i = 0; i < nelems; i++)
{
strarr[i] = (char*)malloc(sprintf(buf, "%d", vals[i]) + 1);
strcpy(strarr[i], buf);
}
return strarr;
}
void freeStrArr(char** strarr, int nelems)
{
int i = 0;
for (i = 0; i < nelems; i++) {
free(strarr[i]);
}
free(strarr);
}
void iarrtostrarrinc()
{
int i_array[] = { 65, 66, 67, 68, 69 };
char** strarr = makeStrArr(i_array, 5);
int i;
for (i = 0; i < 5; i++) {
printf("%s\n", strarr[i]);
}
freeStrArr(strarr, 5);
}
Một malloc-cast không phải là 'pure C', C++ của nó. – user411313
- 1. Chuyển đổi mảng byte (mảng char) thành kiểu số nguyên (ngắn, int, dài)
- 2. Chuyển đổi NSString thành mảng char
- 3. Chuyển mảng char thành unsigned char *
- 4. C - unsigned int để unsigned char mảng chuyển đổi
- 5. Chuyển đổi mảng char để một số int trong C
- 6. Chuyển chuỗi mảng thành mảng int
- 7. Làm thế nào để chuyển đổi mảng int thành int?
- 8. Hiệu quả: mảng char vs int mảng
- 9. Chuyển mảng char thành mảng byte và ngược lại
- 10. Chuyển đổi int thành mảng byte trong C?
- 11. Python - Chuyển đổi Hex thành INT/CHAR
- 12. Chuyển đổi từ chuỗi char thành mảng uint8_t?
- 13. Cách chuyển đổi một phần của mảng char thành chuỗi
- 14. Chuyển mảng char thành đối tượng NSString
- 15. Chuyển đổi char A-Z thành int tương ứng.
- 16. Biến mảng char thành chuỗi
- 17. Vấn đề chuyển đổi Đặt số nguyên thành mảng int []
- 18. Chuyển đổi một Int thành một mảng BCD
- 19. Chuyển đổi danh sách số nguyên thành int mảng
- 20. Chuyển đổi char [] mảng để String
- 21. Tái cấu trúc Ruby: Chuyển chuỗi mảng thành mảng int
- 22. Chuyển đổi đơn char sang int
- 23. Mảng kép chuyển đổi thành mảng byte
- 24. chuyển đổi mảng chuỗi thành mảng byte
- 25. Làm thế nào để chuyển đổi mảng char thành mảng chuỗi?
- 26. Trường hợp chuyển đổi C/C++ trên mảng char
- 27. Chuyển đổi mảng chuỗi (danh mục) thành mảng int từ một khung dữ liệu gấu trúc
- 28. Lỗi khi chuyển đổi mảng byte thành mảng int trong C#
- 29. Cách chuyển đổi từ mảng boolean thành mảng int trong python
- 30. Làm thế nào để chuyển đổi một mảng byte thành một mảng int?
gì 1,2,3,4,5 đứng cho? Một số chuyển đổi hợp lý bạn đang mong đợi là gì? Vui lòng thêm ví dụ cho câu hỏi của bạn. – Aamir
bạn có thể sử dụng sprintf – Marii
Đó là một lỗi đánh máy ... ví dụ int của nó [5] – Allwyn