- Szívós, szép és kitartó az új OnePlus óra
- Telekom mobilszolgáltatások
- Samsung Galaxy A54 - türelemjáték
- Megjelent a Poco F7, eurós ára is van már
- Samsung Galaxy S23 Ultra - non plus ultra
- Xiaomi 15 Ultra - kamera, telefon
- Milyen mobilnetet vegyek?
- Google Pixel topik
- Okosóra és okoskiegészítő topik
- Nem fogy a Galaxy S25 Edge?
-
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
Hirdetés
● olvasd el a téma összefoglalót!
- Easun iSolar SMW 11kW Twin Hibrid inverter // Dupla MPPT // BMS // WiFi
- GAMER PC : RYZEN 7 5700G/// 32 GB DDR4 /// RX 6700 XT 12 GB /// 512 GB NVME
- GAMER MSI LAPTOP : 15,6" 144 HZ /// i5 12450H /// 16GB DDR4/// RTX 4050 6GB/// 1TB NVME
- Manfrotto 055 magnézium fotó-videófej Q5 gyorskioldóval
- Sony ECM-W2BT
- Bomba ár! Lenovo ThinkPad P50 - i7-HQ I 16GB I 256SSD I Nvidia I 15,6" FHD I Cam I W10 I Gari!
- Lenovo ThinkPad X13 G2 multitouch
- Azonnali készpénzes GAMER / üzleti notebook felvásárlás személyesen / csomagküldéssel korrekt áron
- AKCIÓ! Lenovo Legion Slim 5 Gamer notebook - R7 7435HS 16GB RAM 1TB SSD RTX 4070 8GB GDDR6 WIN11
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 4070Ti Super GAMER PC termékbeszámítás
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest