У меня есть массив целых чисел int example[5] = {1,2,3,4,5}
. Теперь я хочу преобразовать их в массив символов, используя C, а не C++. Как мне это сделать?Преобразование массива int в массив char
ответ
В зависимости от того, что вы действительно хотите, есть несколько возможных ответов на этот вопрос:
int example[5] = {1,2,3,4,5};
char output[5];
int i;
Straight копировальных управляющие символы давая ASCII 1 - 5
for (i = 0 ; i < 5 ; ++i)
{
output[i] = example[i];
}
символы '1' - «5 '
for (i = 0 ; i < 5 ; ++i)
{
output[i] = example[i] + '0';
}
строки, представляющий 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);
}
Что делать, если целое число больше, чем '9'? Целые числа выше '10' не будут преобразованы в формат символов. – Stallman
Вы можете преобразовать один значное-целое число в соответствующий символ, используя это выражение:
int intDigit = 3;
char charDigit = '0' + intDigit; /* Sets charDigit to the character '3'. */
Обратите внимание, что это только справедливо, конечно, для однозначных цифр. Экстраполирование вышеуказанного для работы с массивами должно быть прямым.
Вам необходимо создать массив, потому что sizeof(int)
(почти наверняка) отличается от sizeof(char)==1
.
Имейте петлю, в которой вы делаете char_example[i] = example[i]
.
Если то, что вы хотите, чтобы преобразовать целое число в строку, вы можете просто подвести ваше целое число '0'
, но только если вы уверены, что ваше целое число от 0 до 9, в противном случае вам нужно чтобы использовать некоторые более сложные, такие как 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;
}
Выходы:
c[0] = 65
c[1] = 66
c[2] = 67
c[3] = 68
c[4] = 69
Ваш ответ будет работать только для чисел до 999, после чего он начнет усекать цифры - INT_MAX для целого числа дополнений 32 бит 2 - это 2147483647, который как более 3 цифр (один из четырех выбран с помощью '' \ 0 '') – JeremyP
@JeremyP Я понимаю, что вы имеете в виду, спасибо. – karlphillip
В чистом C Я хотел бы сделать это следующим образом:
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);
}
Malloc-cast не является «чистым C», его C++. – user411313
- 1. Преобразование массива int в массив char
- 2. Преобразование массива int в char *
- 3. Преобразование «int» в «char» внутри массива char
- 4. Преобразование массива char в массив int без цикла в Java?
- 5. Char массив против Int массива
- 6. Преобразование из массива unsigned int в массив unsigned char
- 7. Преобразование массива int в массив char с использованием Golang?
- 8. Преобразование массива int ** в массив char ** другого размера/композиции
- 9. Преобразование int в массив char в Java
- 10. Преобразование строки (char) в массив (int)
- 11. C - Преобразование int в char
- 12. Преобразование целочисленного целочисленного массива в массив char
- 13. Преобразование массива строк в массив char
- 14. Преобразование Int в Char Array
- 15. Преобразование char * в int
- 16. Преобразование int в char
- 17. Преобразование char в int?
- 18. Преобразование char * в int
- 19. Преобразование int в char?
- 20. Преобразование массива INT/всплывают
- 21. Преобразование массива из unsigned char * в char *
- 22. Преобразование массива String в массив Char
- 23. Преобразование int в char в C?
- 24. Добавление int в массив char
- 25. Преобразование NSString в массив char
- 26. Преобразование Char * в массив Char *
- 27. преобразование массива 2d char в char *
- 28. realloc - преобразование int в char
- 29. Преобразование char массива в String
- 30. Преобразование массива строк в массив Int
Что 1,2,3,4,5 стоять? Какие разумные преобразования вы ожидаете? Добавьте пример к своему вопросу. – Aamir
вы можете использовать sprintf – Marii
Его опечатка ... его int example [5] – Allwyn