-
Fototrend
Új hozzászólás Aktív témák
-
-
Jester01
veterán
-
Jester01
veterán
#include <stdio.h>
int main (int argc, char *argv[])
{
FILE *be;
int c;
char *t[256] = { 0, };
t[(unsigned char) 'á'= ''a''';
t[(unsigned char) 'Á'= ''A''';
be = fopen (argv[1], ''r'');
while ((c = fgetc (be)) != EOF)
{
if (t[c] == NULL)
{
fputc(c, stdout);
} else {
fputs(t[c], stdout);
}
}
fclose (be);
return 0;
} -
bambano
titán
#include <stdio.h>
FILE *be;
char *t[256];
int iii,c;
int main(int argc, char *argv[]) {
for(iii=0;iii<256;iii++) t[iii]=NULL;
t['á'=''a'''; // itt felsorold az összes átírnivalót
t['A'=''A''';
be=fopen(argv[1],''r'');
while(!feof(be)) {
c=fgetc(be);
if(t[c]==NULL) {
printf(''%c'',c); } else {
printf(''%s'',t[c]); }
}
fclose(be);
return 0;
}
nekem ennyiből megállt. rendes helyen nem ártana ellenőrizn az argumentumok számát, meg hogy meg lehet-e nyitni a file-t meg ilyenek. de most mindjárt hajnali kettő
Szerk: a kódbeszúrás nem ment elsőre
ohh,de jó, hogy a t tömb i indexét smileynak vette a fórumszoftver...
[Szerkesztve]
[Szerkesztve] -
Forest_roby
őstag
jah, van!
A lefoglalt memóriaterületet amikor kezded feltölteni szöveggel az trükkös rész. Lehet egyszerűen csinálni és lehet jól csinálni. ha minden ciklusban megkeresed a szöveg végét az nem tul hatékony eljárás lenne. A lefoglalt memóriaterület pointerét le kellene másolni és minden ciklusban növelni az értékét annak megfelelően, hogy 1 karakterrel nőt elötte a szöveg v 2 -vel. igy mindig jó helyen állna a pointer. Kiváncsi lennék, hogy ezt hogy valósítanák ( hogy valósítanám meg? ) -érdekes feladat.... Lehet nekiálok! -
bdav
őstag
ezzel a legnagyobb baj az h. karaktert akarsz stringgel hasonlítani. u.i. ha jól látom ahogy a motor legyakta az [ i ] -t akkor ez van:
switch(str_in [i ])
{
...
case ''á''
...
namost az str_in[ i] az 1 db char típusú lesz a ''á'' viszont char* ot eredményez. ''á'' helyett 'á' kellene.
másik gáz az lesz hogy az str_outban mindig csak egy karakter kerül majd be. ráadásul ezt megcsinálod hogy str_out = ''á'' akkor az foglal szépen helyet egy egy karakter hosszú stringnek, lezárja \0-al aztán ha mögé akarsz írni akkor az hogy string_out[ 2] az nem túl szép és nem is fog működni (az 1 dolog hogy nem lefoglalt memóriaterületre írsz, de ugyis csak a \0-ig látja stringnek, ha meg azt írod felül akkor a memóriát kilistázza majd az első 0-ig)
a helyedben én írnék egy eljárást ami két char* -ot vár paraméterül és a másodikat hozzáfűzi az elsőhöz (nemtom van e ilyen beépített függvény v. nincs). Vagy használj C++-t és String osztályt
mégvalami: 2 C stringet nem tudsz ==-vel összehasonlítani, arra való az strcmp, pár hszel ezelőtt volt róla szó.
[Szerkesztve] -
Jester01
veterán
Nem lesz jó, mert az str_out tömbbe nem indexelhetsz ugyanúgy i-vel. Hiába írod, hogy str_out[i+1] a következő iterációban felülírod, mivel a ciklusfejben i++ van.
Vezess be egy másik változót, ami kimenő index.
Amúgy a táblázatos megoldás szerintem is jobb lenne.
MOD: de csak egy dimenzió kell. Az index a bemenő karakter, az elem pedig a helyettesítés. Pl ilyesmi lehet
char* tabla[255] = {0, }
tabla[(unsigned char)'á'= ''a''';
tabla[(unsigned char)'é'= ''e''';
...
Vigyázni kell, hogy unsigned char legyen, mert különben elképzelhető, hogy pont az ékezetes karakterek negatív kódot kapnak ami tömb indexelésnél nem túl hasznos.
[Szerkesztve] -
Forest_roby
őstag
miért nem másolod be ide? Aztán eldöntjük, hogy akarunk -e foglalkozni vele vagy nem.
Előljáróban:
assemblys trükk - xrate ( translate szlengesen ) asszem a parancs neve. Nyugi, nem assemblys megoldást akarok mondani. A lényeg az, hogy csinálhatnál egy nagy táblázatot, amiben az egyes karakterekhez egy másikat rendelsz. Ezt be a memóriába és utánna már csak a táblázaton kell keresni az adott karakter párját. Ennél gyorsabb, működő megoldást nem fogsz csinálni az tuti!
Sok sikert!
mod: mondjuk nem részleteztem a módszer lényegét, de talán nem is kell. Ha érdekel: fontos, hogy minden karakternél futtas egy keresést a táblán és cserélj, ha nem akarnál cserélni az adott helyen akkor a táblában a karakter párja saját maga...... -persze itt nem egy karakter van hanem több, ez nem lehet akadály... : )
[Szerkesztve]
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- HP OMEN 17" Gamer laptop , RTX 4060 , R5 8645HS , 16GB DDR5
- Eladó egyben 17 db HDD
- szinte új 11 hüvelykes iPad Pro (M4) (2024)Wi-Fi 256GB silver ezüst Smart Cover Apple 3 év garancia
- Xiaomi Redmi Note 11 128GB, Kártyafüggetlen, 1 Év Garanciával
- új aktiválatlan MacBook Pro 16 hüvelykes M1 Max 1TB SSD 64GB Apple silver ezüst
- Bomba ár! Dell Latitude 5480 - i5-6GEN I 8GB I 500GB I 14" HD I Cam I W10 I Garancia!
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RX 9070 16GB GAMER PC termékbeszámítással
- LG 42C3 - 42" OLED EVO - 4K 120Hz 0.1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - A9 Gen6 CPU
- Apple iPhone 13 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest