Kezdőoldal » Számítástechnika » Programozás » String megfordításban kellene...

String megfordításban kellene segítség, miért nem működik?

Figyelt kérdés

Sziasztok egy kis segítség kellene:

mar[] -> egy char tömb amiben számok/betűk vannak(számrendszer átváltás eredménye. átváltja rendesen, csak ugye a fordítottja kellene)

char temp;

j=0;

s = (i-1); i az a string hossza

while (j < s) {

temp = mar[j];

mar[j] = mar[s];

mar[s] = temp;

j++;

s--;

}

printf("%s", mar);


kiírattam(megfordítás előtt), enélkül tökéletesen átváltja a számot csak valamiért a megfordításnál van baja.

Lefordulni lefordul, csak nem ír ki semmit.

Előre is köszönöm a választ!



2014. nov. 23. 20:28
 1/9 anonim ***** válasza:

temp = mar[j];

mar[j] = mar[s];

mar[s] = temp;


Te a j. elemet mindig az utolsóval cseréled. Ez nem megfordítás.

2014. nov. 23. 21:10
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

Bocsánat, de kifejtenéd hogy hogy érted?

Igen első futásban az elsőt(j) meg az utolsót(i) cserélem ki, de folyamatosan léptetem, szóval elvileg végig cserélgeti a az elemeket.

Eddig mindig így csináltam a string megfordítást(persze lényegesen egyszerűbb programokban), de most valamiért nem működik.

Interneten is utána néztem hátha csak én bénáztam el valamit,(ami biztos h valamit bénáztam mert nem működik, ezért kértem segítséget) de ott is így írták.

2014. nov. 23. 21:19
 3/9 anonim ***** válasza:
Igazad van, bocsánat, az s-- elkerülte vaksi szemeimet. Bocsi. :)
2014. nov. 23. 21:30
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:

A kódrészlet (bár nem mondtad, milyen nyelv...) jó, úgyhogy nem ezzel van a hiba (az i egyébként nem látom, hogy hol kap értéket, azt nézd meg).

Kellene a teljes kód.

2014. nov. 23. 21:40
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

Vaksi #1-#3 vagyok, egy újabb gondolattal, hátha ezúttal hasznos leszek:


Nem csak a string feléig kéne menni, mikor megfordítod? Mert ha túlmész a felén, gyakorlatilag a korábban cserélteket fordítod vissza.


1. 12345

2. 52341

3. 54321 - itt kéne megállni

4. 52341

5. 12345


Mondjuk ez a "nem ír ki semmit"-re nem lesz megoldás valószínűleg.

2014. nov. 23. 21:56
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:

Pedig megcsinálja az átváltást csak ugye fordított sorrendben :/

Hát az egész kód még nincs teljesen kész, de tessék:

(bármiből 10-esre fordít gond nélkül, és 10-ről is csak ugye fordítva.

a 10-ből bármibe részét viszont külön programban próbáltam(nem szeretek beletákolni az eredetibe amíg nem működőképes az adott rész) de gyors beledobtam{atvalt2 fgv-ben van} és mint mondtam még nincs kész a "törzs" program)

Elég hosszú szóval föltöltöttem inkább hátha úgy jobban átlátható:(sajnos nem engedi belinkelni. hosszú linket kellene beírni de alapból ezt adta)

#include <stdio.h>


int jegy(char jegyek) /*++++*/

{

int a;

switch(jegyek)

{

case '0': a=0; break;

case '1': a=1; break;

case '2': a=2; break;

case '3': a=3; break;

case '4': a=4; break;

case '5': a=5; break;

case '6': a=6; break;

case '7': a=7; break;

case '8': a=8; break;

case '9': a=9; break;

case 'A': a=10; break;

case 'B': a=11; break;

case 'C': a=12; break;

case 'D': a=13; break;

case 'E': a=14; break;

case 'F': a=15; break;

case 'G': a=16; break;

case 'H': a=17; break;

case 'I': a=18; break;

case 'J': a=19; break;

case 'K': a=20; break;

case 'L': a=21; break;

case 'M': a=22; break;

case 'N': a=23; break;

case 'O': a=24; break;

case 'P': a=25; break;

case 'Q': a=26; break;

case 'R': a=27; break;

case 'S': a=28; break;

case 'T': a=29; break;

case 'U': a=30; break;

case 'V': a=31; break;

case 'W': a=32; break;

case 'X': a=33; break;

case 'Y': a=34; break;

case 'Z': a=35; break;

}


return a;

}


char jegy2(int jegyek) /*++++*/

{

char a;

switch(jegyek)

{

case 0: a='0'; break;

case 1: a='1'; break;

case 2: a='2'; break;

case 3: a='3'; break;

case 4: a='4'; break;

case 5: a='5'; break;

case 6: a='6'; break;

case 7: a='7'; break;

case 8: a='8'; break;

case 9: a='9'; break;

case 10: a='A'; break;

case 11: a='B'; break;

case 12: a='C'; break;

case 13: a='D'; break;

case 14: a='E'; break;

case 15: a='F'; break;

case 16: a='G'; break;

case 17: a='H'; break;

case 18: a='I'; break;

case 19: a='J'; break;

case 20: a='K'; break;

case 21: a='L'; break;

case 22: a='M'; break;

case 23: a='N'; break;

case 24: a='O'; break;

case 25: a='P'; break;

case 26: a='Q'; break;

case 27: a='R'; break;

case 28: a='S'; break;

case 29: a='T'; break;

case 30: a='U'; break;

case 31: a='V'; break;

case 32: a='W'; break;

case 33: a='X'; break;

case 34: a='Y'; break;

case 35: a='Z'; break;

}

return a;

}


int atvalt(int a, int e, char cszam[]) /*++++*/

{

int szor;

int i, j, y=1;

int er=0;


for(i=e; i != 0 ;i--){

j = 1;

if(y == 1){

szor=1;

}else{

while(j != y){

szor*=a;

j++;

}

}

er += (jegy(cszam[i-1])) * szor;

y++;

szor=1;

}

return er;

}


void atvalt2(int ter, int ua) /*++++*/

{

int i=0, j=0;

int ser;

char mar[32];


while(ser != 0){

ser = ter / ua;

mar[i] = jegy2(ter % ua);

ter = ser;

i++;

}

printf("%s", mar);

}


int hosz(char cszam[]){ /*++++*/

int e=0;

while(cszam[e] != '\0'){

e++;

}

return e;

}


int hiba(int a, int ua, int cszam[], int e){ /*++++*/

int i=0;

if( a<2 || a>36 || ua<2 || ua>36 ){

return -1;

}

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

if( (jegy(cszam[i])) >= a){

return -1;

}

}

}



int main(){ /*-----------------------------------*/


FILE *f = fopen("be.txt", "r");

int a, ua, e, i;

int ter; /*miutan 10-esbe valtottuk*/

char cszam[32];

char Er[32];

char xhiba[]={"HIBA"};

fscanf(f,"%d %d %s",&a, &ua, &cszam);

fclose(f);

f = fopen("ki.txt", "w");


e = hosz(cszam);



if( hiba(a, ua, cszam, e) == -1 ){ /*ide irom majd a hibakezelest*/

fprintf(f,"%s\n", xhiba);

}else{

ter = (atvalt(a,e,cszam));

atvalt2(ter,ua);

}



fclose(f);

return 0;

}

2014. nov. 23. 22:03
 7/9 anonim ***** válasza:
50%
Atyaég ezt a kódot.
2014. nov. 24. 08:28
Hasznos számodra ez a válasz?
 8/9 tabaki ***** válasza:
Hát, én csak pascalban szoktam programozni időnként, de ott az ilyen megfeleltetésekre két szimpla kivonást/összeadást használnék a millió elágazás helyett, aszerint, hogy számról vagy betűről van szó. De ha nem ilyen szabályos, hanem összevissza értékek lennének, akkor is megoldható volna két (vagy egy kétdimenziós) tömbbel, akkor ciklusban ismételt össze-vissza kapálás helyére egyetlen értékadás lépne, századannyi munkával és idő alatt.
2014. nov. 24. 10:25
Hasznos számodra ez a válasz?
 9/9 anonim ***** válasza:

a megforditashoz csinalsz egy masik tombot...

char temp[strlen(mar)];

int i,j = 0;

for(i = strlen(mar); i >= 0; i-- )

{

temp[j] = mar[i];

j++;

}

s a vegen a temp tartalmazza a mar lanc forditottjat

2014. nov. 24. 14:32
Hasznos számodra ez a válasz?

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!