-
Mobilarena
Ú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!
- Peugeot, Citroën topik
- Futás, futópályák
- Sorozatok
- Azonnali játékos kérdések órája
- Székesfehérvár és környéke adok-veszek-beszélgetek
- iPhone topik
- Apple Watch Sport - ez is csak egy okosóra
- Melyik tápegységet vegyem?
- Kertészet, mezőgazdaság topik
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- További aktív témák...
- Playstation 5 lemezes - Gran Turismo 7, Tony Hawk's Pro Skater 1-2 eladó!
- ROG Ally (2023) RC71L + JSAUX HB1201S
- Vadonatúj, bontatlan iPhone AIR 256GB fekete és kék KÁRTYAFÜGGETLEN! 1 év Apple garancia!
- 3D nyomtatás kiváló minőségben / számlával / akár 9 színnel / széles anyagválaszték,
- HP,15.6",250 G6,8.gen.core i5 (8X4,0Ghz)8-32GB RAM,256GB-1TB SSD,nagyon jó akku,Win.11,szép
- Telefon felvásárlás!! Huawei P20 Lite/Huawei P20/Huawei P30 Lite/Huawei P30/Huawei P30 Pro
- Honor 200 Lite 256GB, Kártyafüggetlen, 1 Év Garanciával
- ÚJ Dell Latitude 15 5550 - 15.6"FullHD IPS - Ultra 5 135U - 16GB - 512GB SSD - Win11 - 2,5+ év gari
- BESZÁMÍTÁS! ASUS PRIME H510M i5 10400F 16GB DDR4 512GB SSD RX 6600 XT OC 8GB CHIEFTEC Libra 600W
- Gyors, Precíz, Megbízható TELEFONSZERVIZ, amire számíthatsz! Akár 1 órán belül
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest