Mam tablicę liczb całkowitych, powiedzmy int example[5] = {1,2,3,4,5}
. Teraz chcę przekonwertować je do tablicy znaków za pomocą C, a nie C++. Jak mogę to zrobić?Konwertuj tablicę int na tablicę znaków
Odpowiedz
W zależności od tego, co naprawdę chcesz, istnieje kilka możliwych odpowiedzi na to pytanie:
int example[5] = {1,2,3,4,5};
char output[5];
int i;
Prosto kopiowania znaki sterujące dając ASCII 1 - 5
for (i = 0 ; i < 5 ; ++i)
{
output[i] = example[i];
}
znaków '1' - „5 "
for (i = 0 ; i < 5 ; ++i)
{
output[i] = example[i] + '0';
}
ciągów reprezentujących 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);
}
Co się stanie, jeśli liczba całkowita jest większa niż "9"? Liczby całkowite powyżej "10" nie zostaną zamienione na format char. – Stallman
Można konwertować jednocyfrowy liczbą całkowitą do odpowiedniego charakteru, używając tego wyrażenia:
int intDigit = 3;
char charDigit = '0' + intDigit; /* Sets charDigit to the character '3'. */
Należy pamiętać, że to jest ważne tylko, oczywiście, dla pojedynczych cyfr. Ekstrapolowanie powyższych do pracy przeciwko tablicom powinno być proste.
Musisz utworzyć tablicę, ponieważ sizeof(int)
jest (prawie na pewno) inny niż sizeof(char)==1
.
Masz pętlę, w której można wykonać char_example[i] = example[i]
.
Jeśli to, co chcesz, jest konwertować liczbę całkowitą na łańcuch może po prostu podsumować swoją całkowitą do '0'
ale tylko jeśli jesteś pewien, że jest liczbą całkowitą z przedziału od 0 do 9, w przeciwnym razie trzeba używać bardziej wyrafinowanych, takich jak 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;
}
Wyjścia:
c[0] = 65
c[1] = 66
c[2] = 67
c[3] = 68
c[4] = 69
Twoja odpowiedź będzie działać tylko dla numerów do 999, po których rozpocznie się obcięcie cyfr - INT_MAX dla liczby całkowitej wynoszącej 32 bitów 2 to 2147483647, które mają raczej więcej niż 3 cyfry (jedna z twoich jest zajęta z ''\ 0 '') – JeremyP
@JeremyP Rozumiem, co masz na myśli, dziękuję. – karlphillip
W czystym C zrobiłbym to tak:
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);
}
Odlew malloc nie jest "czystym C", jego C++. – user411313
- 1. Konwertuj int na tablicę bajtów w C?
- 2. Konwertuj ciąg na tablicę int używając LINQ
- 3. Konwertuj ciąg na tablicę znaków swift 2.0
- 4. Konwertuj liczbę całkowitą na tablicę znaków: java
- 5. Konwertuj tablicę znaków na niepodpisany znak *
- 6. Konwertuj ciąg znaków javascript na tablicę php
- 7. Jak przekonwertować tablicę znaków na tablicę znaków?
- 8. Konwertuj tablicę ciągów na tablicę bajtów
- 9. Konwertuj nierównomierną tablicę komórek na tablicę numeryczną
- 10. Konwertuj wielowymiarową tablicę PHP na tablicę javascript
- 11. Konwertuj tablicę na JSON
- 12. Konwertuj tablicę na csv
- 13. Konwertuj tablicę na ciąg? C#
- 14. Konwertuj std :: wektor na tablicę
- 15. Konwertuj listę znaków (lub tablicę) na ciąg znaków
- 16. JavaScript: Konwertuj textarea na tablicę
- 17. Konwertuj tablicę numpy na ciąg CSV i ciąg znaków CSV z powrotem na tablicę numpy
- 18. Konwertuj tablicę ciągu (kategorię) na tablicę int z pandasowej ramki danych
- 19. Konwertuj dwuwymiarową tablicę
- 20. Konwertuj liczbę całkowitą na tablicę bajtów
- 21. PHP - Konwertuj tablicę wielowymiarową na ciąg?
- 22. Konwertuj tablicę bajtów na ciąg znaków w PHP
- 23. Konwertuj zestaw wyników z tablicy SQL na tablicę ciągów znaków
- 24. Przekształć tablicę znaków na ciąg znaków
- 25. Konwertuj tablicę bajtów na krótką tablicę w C#
- 26. Konwertuj tablicę liczb całkowitych na tablicę łańcuchów w Ruby?
- 27. Konwertuj tablicę 1D na tablicę 2D w numpy
- 28. Konwertuj listę <int> na połączony ciąg znaków ints?
- 29. Konwertowanie int na 4-bajtową tablicę znaków (C)
- 30. Konwersja String na tablicę znaków
Co 1,2,3,4,5 oznaczają? Jakie są uzasadnione konwersje, których się spodziewasz? Dodaj przykład do swojego pytania. – Aamir
możesz użyć sprintf – Marii
To jest literówka ... jej int example [5] – Allwyn