String megfordításban kellene segítség, miért nem működik?
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!
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.
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.
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.
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.
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;
}
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
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!