Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Ääkkösten muutos isoiksi kirjaimiksi

Dicator [19.04.2007 08:00:55]

#

Olen tässä jo jonkin aikaa tehnyt automaatio ohjelmaa, joka keräisi lähdetiedostosta tarvittavat tiedot ja kirjoittaisi ne oikein kohdetiedostoon.

Muuten olen saanut kaikki pelittämään pienen pähkäilyn jälkeen, mutta ääkkösten muuttaminen isoiksi kirjaimiksi ei vain ota onnistuakseen.

Seuraavanlaisella systeemillä olen tätä yrittänyt:

for(x=0;x<=170;x++){
   /*Muutetaan kaikki kirjaimet ISOIKSI*/
   k=toupper(testi[x]);
   putc(k,updated); //put line to updated file
   }

Tiedän että tuon saisi jotenkin toteutettua ascii koodeilla, mutten ole siinäkään onnistunut.

Kaikki apu ja vinkit ovat tarpeen

setä [19.04.2007 10:06:43]

#

Lisää ääkkösille erillinen koodi jolla pakotat ne muuttumaan oikein tyyliin:

If testi[x] = "ä" Then k = "Ä"

(kielioppi tietty pielessä mutta ajatus kai selvinnee)

hunajavohveli [19.04.2007 10:08:15]

#

Iso ja pieni kirjain ovat ASCII:ssa 32 merkin päässä toisistaan, eli kun halutaan muuttaa iso kirjain pieneksi, lisätään 32, ja kun pieni isoksi, vähennetään 32. Ääkköset eivät kuulu ASCII:hin, eivätkä ne todennäköisesti noudata käyttämässäsi merkistössä samaa logiikkaa kuin muut kirjaimet, joten niiden muunnoksen joudut koodaamaan erikseen sedän neuvomalla tavalla.

Dicator [19.04.2007 10:17:49]

#

Tuota yritin mutta vika olikin noissa lainausmerkeissä.

Eli näin se pelittää:

If(testi[x] == 'ä')
  testi[x] = 'Ä';

Joskus sitä ei vaan näe itse noita ratkaisuja.

koo [19.04.2007 11:48:10]

#

Tämä näennäisen helppo juttuhan on oikeasti tosi vaikea tehdä oikein. Yksi konsti nyt voi kumminkin olla käyttää C:ssä setlocale-asetusta. Silloin toupper ja sen kaverit toimivat paremmin, kunhan vain käyttäjän merkistöt on kunnolla määritelty käyttöympäristössä. Usein näin ei sitten kumminkaan ole ja systeemi voi toimia muutenkin vähän niin ja näin utf-8:n kanssa.

Ympäristöriippuvaa touhu on muutoinkin, jos miettii vaikka että miten saksalainen ß muutetaan uppercaseksi tai mitä touhussa tapahtuu ranskan vokaaleille, joiden päällä on erilaisia täpliä.

Ikioman muunnostaulukon tekeminen voi olla yksinkertaisinta rajoitetuissa pikkujutuissa.

char to_uppercase(char c)
{
  static const char *up = { /* ... */ };
  return up[(unsigned char) c];
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta