[C] Zamiana polskich liter ą -> a itp - gdzie jest blad?

0

Witam

Miałem do napisania program w C który zamienia ą Ą itp na a A.

Mam taki kod (on jest tylko dla ĄąĆc dla przykladu reszte pozniej uzupelnie jak bedzie dobrze dzialal):

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char* argv[])
{
if(!argv[1] && !argv[2])
{
printf("podaj nazwy plików");

}
else
{

FILE *f1, *f2;
char c;
char pol[]={165, 164, 134, 143};
char nor[]={97, 65, 99, 67};

f1= fopen(argv[1],"r");
if(f1== NULL)
{
printf("Blad! Nie mozna otworzyc pliku!");
};
f2= fopen(argv[2], "w");
while((c = fgetc(f1)) != EOF)
{
if(c==pol[0])
c=nor[0];
fprintf(f2, "%c", c);
};
}
}

Program niestety zle zamienia litery, tzn w zlej kolejnosci je rozpoznaje, moze ktos widzi bledy i wie jak je poprawic?

Cyferki w
char pol[]={165, 164, 134, 143};
char nor[]={97, 65, 99, 67};
są z kodu ASCII

Mam np 1.txt o treści: ąĄćĆ i powstaje 2.txt: ąaćĆ

0

Czytasz c w pętli while sprawdzasz tylko czy c==pol[0].
chyba chodziło Ci o:

for(int i=0;i<4;i++){
if(c==pol[i]) c=nor[i];
}
fprintf(f2, "%c", c);
0

Ok już dołożyłem sobie pętlę tylko teraz mam problem jak zamiast ąę itd zapisać to w postaci kodow ASCII typu 165 itd
np:
char pol[]={165, 164, 134, 143};
char nor[]={97, 65, 99, 67};

0

najładniej byłoby zrobić tabliczkę, powiedzmy char xlat[256], a wtedy while((c = fgetc(f1)) != EOF)
fprintf(f2, "%c", xlat[c]);


```cpp
int pol[18] = {'Ą','ą','Ć','ć', ...}; 
int lat[18] = {'A','a','C','c', ...};
char xlat[256];

void mkxlat (void) {
     int i;
     for (i=0; i<256; i++)
           xlat[i]=i;
     for (i=0; i<18; i++)
           xlat[ pol[ i ] ]= lat[ i ]; }
0
mgr.Dobrowolski napisał(a)
int pol[18] = {'Ą','ą','Ć','ć', ...}; 
int lat[18] = {'A','a','C','c', ...};
char xlat[256];

void mkxlat (void) {
     int i;
     for (i=0; i<256; i++)
           xlat[i]=i;
     for (i=0; i<18; i++)
           xlat[ pol[ i ] ]= lat[ i ]; }

W tym kodzie juz nie musze wpisywac cyferek z ASCII bo on sam zamienia polskie znaki na ascii?

Bo chodzi mi o to zeby on nie pobieral z tablicy polskich liter tylko znaki ascii i przerabial rowniez znaki ascii

char pol[]={165, 164, 134, 143};
char nor[]={97, 65, 99, 67};

0

z pewnością najłatwiej tablicę lat[] zadeklarować tak:

char lat[18]={'A','a','C','c','E','e','L','l','N','n','O','o','S','s','Z','z','Z','z');

To będą "łacińskie" odpowiedniki polskich ogonków.
Tablicę pol[], można zapisać na dwa sposoby:

char pol[18]={165, 185, 198, 230,...}

albochar pol[18] = {'Ą','ą','Ć','ć', ...};

Wygodniejszy sposób drugi, ale... pojawić się mogą pewne problemy związane ze stroną kodową, a może nie, sprawdzisz.
Funkcję "mkxlat()" zawołaj raz, zanim przystąpisz do "tłumaczenia".
Później, zamiana z polskiego na "polskawy" to 
```cpp
xlat[c]

Tak jak próbowałeś, musisz sprawdzić każdy odczytany znak (no może tylko <127) z tablicą pol[]

  for (j=0; j<18; j++) 
     if (c==pol[j]) {
             c=nor[j];
             break;
     }

Co ładniejsze?

0

Bardzo dziękuję za rady :) Jeszcze będę miał pytania bo teraz mam za zadanie napisać w C bazę danych do której będziemy mogli dopisywać, kasować i przeglądać dane. Pozdrawiam i dziekuje

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.