Kezdőoldal » Számítástechnika » Programozás » Hogyan tudok egy int tipusú...

Hogyan tudok egy int tipusú tömb adatai alapján egy char tipusút feltölteni?

Figyelt kérdés
Az int tömbben 0,1,2 adatok, ez alapján kellene a char tömböt a,b,c adatokkal feltölteni. 0->a; 1->b; 2->c. a második tömbnek követnie kell az első változásait.
2011. okt. 10. 22:36
1 2
 1/12 A kérdező kommentje:
Elfelejtettem leírni: C nyelv.
2011. okt. 10. 22:38
 2/12 anonim ***** válasza:

"Hogyan tudok egy int tipusú tömb adatai alapján egy char tipusút feltölteni?"

Az int tömbben 0,1,2 adatok, ez alapján kellene a char tömböt a,b,c adatokkal feltölteni. 0->a; 1->b; 2->c."

for ciklussal végigmész a tömb elemein és értéküket átmásolod "=" értékadó művelettel. A char típusú tömbnek legalább akkorának kell lenni mint az int típusú tömb. Az int-be nagyobb számok is ábrázolhatóak mint char-ba ezért nem minden lehetséges számértéket lehet vesztesség nélkül átmásolni, 1 byte-ra csonkít minden számot, kisebb számoknál vesztesség nélkül lehet.


"a második tömbnek követnie kell az első változásait."

???? Mi a cél? Mi értelme van?

2011. okt. 10. 23:31
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:
Nem az a cél, hogy az első tömb adatai jelenjenek meg a második tömbben, hanem az, hogy ahol az elsőben "0" van, ott a másodikban "a" legyen, ahol az elsőben "1", azon a helyen a másodikban "b" stb. Ez az egész egy nagyon egyszerű rendereléshez kell, ahol az első tömb csak számokat tartalmaz, a második meg karaktereket ( az a,b,c csak példa), amikből a képet akarom kirajzoltatni.
2011. okt. 10. 23:47
 4/12 _Jessy_ ***** válasza:

ha úgy akarod, hogy 0->a, stb. akkor nem elég az "="

valahogy így nézne ki:

//kisbetűkre

for(int i = 0; i < inttomb_hossz; ++i)

karaktertomb[i] = (char)inttomb[i] + 97;

//nagybetűkre, 25-->A, 26->B...

for(int i = 0; i < inttomb_hossz; ++i)

karaktertomb[i] = (char)inttomb[i] + 40;

2011. okt. 11. 07:47
Hasznos számodra ez a válasz?
 5/12 anonim ***** válasza:

"0->a; 1->b; 2->c"

Ebből nem derült ki hogy mire gondolsz, én a b c helyébe konkrétan nem meghatározott szám értékeket képzeltem 0 1 2 helyébe meg a tömb 0.-ik 1. 2.-ik tömb elemet ...


"for(int i = 0; i < inttomb_hossz; ++i)

karaktertomb[i] = (char)inttomb[i] + 97;"

Először is ANSI c-ben for cikluson belül nem lehet deklarálni ciklusváltozót, a c++ egyik újdonsága volt.

Másodszor "//"-el levő komment sincs hivatalosan a c nyelv-be, bár a legtöbb fordító lefordítja.

Harmadszor "(char)inttomb[i] + 97" na ilyet nem szabad írni számból karakter konvertálás esetén hogy +97, azt kell írni hogy +'a', egyrészt hibalehetőség hogy elrontja az ember, másrészt nem minden rendszerben 97 a kódja a "a"-nak(nagy valószínűséggel olyan gépen dolgozunk ahol az), az viszont minden kódrendszerben igaz hogy "a"<"b"<"c" ... <"z" és "A"<"B"< ... <"Z"

"(char)inttomb[i] + 40" na itt már el is hibáztad nálam "(" van "A" helyett.

Itt a (char) típuskényszerítés nem lenne kötelező, de nem baj ha van.

2011. okt. 11. 11:18
Hasznos számodra ez a válasz?
 6/12 _Jessy_ ***** válasza:
47%

@11:18

Ahogy te elképzelted, úgy elég az =, ahogy a kérdező később leírta, úgy már nem. Nem kell ezért leugatni a másikat...

2011. okt. 11. 13:45
Hasznos számodra ez a válasz?
 7/12 _Jessy_ ***** válasza:

""(char)inttomb[i] + 40" na itt már el is hibáztad nálam "(" van "A" helyett. "

Ha az inttömb[0] == 0, akkor valóban '(', de miért lenne annyi?!? Nagybetűkről lévén szó, feltételeztem, hogy ebben az esetben a tömb elemei mind 25 és 49 közötti értéket vesznek fel.

2011. okt. 11. 13:55
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:

"Ahogy te elképzelted, úgy elég az =, ahogy a kérdező később leírta, úgy már nem. Nem kell ezért leugatni a másikat..."


Nem vagyok gondolatolvasó, csak a tényeket írtam le.


"""(char)inttomb[i] + 40" na itt már el is hibáztad nálam "(" van "A" helyett. "

Ha az inttömb[0] == 0, akkor valóban '(', de miért lenne annyi?!?"


Szintén azt tudom "mondani", hogy nem vagyok gondolatolvasó, a gondolatmenet meg nem helyes.


"//kisbetűkre

for(int i = 0; i < inttomb_hossz; ++i)

karaktertomb[i] = (char)inttomb[i] + 97;


//nagybetűkre, 25-->A, 26->B...

for(int i = 0; i < inttomb_hossz; ++i)

karaktertomb[i] = (char)inttomb[i] + 40;"

Ha már nagybetűkről is szó van akkor, feltételezted hogy csak kis vagy csak nagybetűket tartalmaz, mi van akkor ha vegyesen tartalmaz kis és nagybetűket?

Nagybetűkről egyébként szó sem volt.


"Nagybetűkről lévén szó, feltételeztem, hogy ebben az esetben a tömb elemei mind 25 és 49 közötti értéket vesznek fel."

A 40-et és a 25-öt és a 49-et elszámoltad, mindig azt mondta a professzor hogy ne számoljuk ki hanem bízzuk a fordító programra még csak elszámolnánk és olvashatóbb a kód ember számára, a fordító helyettünk kiszámolja a megfelelő értékeket. Egyet értettem vele első pillanatba majd hogy nem azt "mondom" hogy ösztönből így csinálnám.


Vettem a fáradságot és elkészítettem hogy melyik számnak melyik angol ABC betűje felel meg, itt megnézheted mit számoltál el:

0 -> 'a'

1 -> 'b'

2 -> 'c'

3 -> 'd'

4 -> 'e'

5 -> 'f'

6 -> 'g'

7 -> 'h'

8 -> 'i'

9 -> 'j'

10 -> 'k'

11 -> 'l'

12 -> 'm'

13 -> 'n'

14 -> 'o'

15 -> 'p'

16 -> 'q'

17 -> 'r'

18 -> 's'

19 -> 't'

20 -> 'u'

21 -> 'v'

22 -> 'w'

23 -> 'x'

24 -> 'y'

25 -> 'z'

26 -> 'A'

27 -> 'B'

28 -> 'C'

29 -> 'D'

30 -> 'E'

31 -> 'F'

32 -> 'G'

33 -> 'H'

34 -> 'I'

35 -> 'J'

36 -> 'K'

37 -> 'L'

38 -> 'M'

39 -> 'N'

40 -> 'O'

41 -> 'P'

42 -> 'Q'

43 -> 'R'

44 -> 'S'

45 -> 'T'

46 -> 'U'

47 -> 'V'

48 -> 'W'

49 -> 'X'

50 -> 'Y'

51 -> 'Z'


Az én megoldásomhoz nem kell ismerni a kódtáblázatot áttekinthetőbb stb. nem akarom "fényezni", de ez az igazság.



Ha csak kisbetű lehet:

for(i = 0; i < inttomb_hossz; ++i) {

karaktertomb[i] = (char)inttomb[i] + 'a';

}



Ha lehet kis és nagybetű is:

for(i = 0; i < inttomb_hossz; ++i) {

if (inttomb[i]<='z'-'a'){

karaktertomb[i] = (char)inttomb[i] + 'a';} else

karaktertomb[i] = (char)inttomb[i] + 'A'-(1+'z'-'a');

}

2011. okt. 11. 20:36
Hasznos számodra ez a válasz?
 9/12 _Jessy_ ***** válasza:
Valóban elszámoltam, valami miatt az volt a fejemben, hogy az angol ABC 25 karaktere, miközben 26. Nem azt mondtam, hogy amit leírtam az megoldja, hanem azt, hogy abból el lehet indulni a dologgal.
2011. okt. 12. 09:29
Hasznos számodra ez a válasz?
 10/12 A kérdező kommentje:

Mielőtt komolyabb vita lenne belőle, azelőtt leírom hogy mire jutottam(tudom, egy kicsit furcsa, hogy megválaszolom a saját kérdésem):

#include<stdio.h>


int main() {

int aMap[10];

char cMap[10];

int i;


/*TESZTADAT*/

/**/ for(i=0; i<10; i++) {

/**/ printf("%d", aMap[i]=1); }

/**/ putchar('\n');

/*TESZTADAT*/


for(i=0;i<10;i++) {

switch(aMap[i]) {

case 0: cMap[i]='a'; break;

case 1: cMap[i]='b'; break;

case 2: cMap[i]='c'; break;

}

printf("%c", cMap[i]); }putchar('\n');


putchar('\n');

system("PAUSE");

return 0;

}

2011. okt. 12. 17:22
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!