Mitä tarkoittaa merkkitaulukko?

sdfd

katso otsikkoa

3

1295

    Vastaukset 3

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Innokas koodaaja

      Taulukko, jonka soluihin on tallennettu kirjaimia, eli tähän malliin:

      char etunimi[20 1] = {'M', 'a', 'i', 'j', 'a', '-', 'K', 'a', 'a', 'r', 'i', 'n', 'a', '\0'};

      Ohjeita:
      HUOM! Esitellyt funktiot ja kirjastot toimivat Visual Studio 2008-ohjelmassa. Muista kääntäjistä ei varmuutta.

      /**************************************
      * Merkkijonot ja niiden käsittely
      * - taulukollinen kirjaimia
      * - päättyy aina '\0' eli
      * merkkijonon päättymismerkki
      * - tilanvaraus: muista varata 1
      * eli poäättymismerkille myös
      * char nimi[5 1]
      * - merkkijonoja käsitellään
      * merkkijonojen käsittely-
      * funktioilla
      *
      * strcpy(); : kopioi merkkitaulukon sisältämän merkkijonon toiseen merkkitaulukkoon
      * strlen(); : laskee merkkijonon pituuden, ei huomioi päättömerkkiä.
      * strcmp(); : vertaa kahta merkkijonoa aakkostuksellisesti keskenään.
      * paluuarvo aakkostus
      * 0 jono1 == jono2
      * > 0 jono1 > jono2
      * < 0 jono1 < jono2
      *
      * strcat(); : yhdistetään kaksi merkkijonoa
      *
      **************************************/

      Esimerkkikoodi Visual Studiossa ajettavaksi:

      #include // printf();
      #include // getch();
      #include
      #include // setlocale();
      #include

      int main(void)
      {
      char etunimi[20 1] = {'M', 'a', 'i', 'j', 'a', '-', 'K', 'a', 'a', 'r', 'i', 'n', 'a', '\0'};
      printf("%s\n", etunimi);

      char sukunimi[30 1];

      /* sukunimi = "Lipponen" EI NÄIN!! */

      strcpy(sukunimi, "Lipponen");
      printf("%s\n", sukunimi);

      int pituus;

      pituus= strlen(sukunimi);
      printf("Merkkijonon %s on %d", sukunimi, pituus);

      char eka[10 1];
      char toka[20 1];
      int vertailuarvo;

      printf("\n\nAnna eka nimi: ");
      scanf("%s", eka); // HUOM! ei &-merkkiä!!

      printf("Anna toka nimi: ");
      scanf("%s", toka);

      vertailuarvo = strcmp(eka, toka);

      printf("\n");

      if(vertailuarvo>0)
      printf("%s on ennen %s aakkosissa.\n",toka, eka);

      else if(vertailuarvo

      • mjono

        Menee vähän pieleen. Ensinnäkin merkkijono EI OLE merkkitaulukko!

        char arr1[3] = "abc";

        Nyt arr1 on 'merkki'- (tarkemmin ASCII-merkki) eli char-taulukko, mutta se EI OLE C:n tarkoittama merkkijono!

        char str2[] = "abc";

        str2 taasen on merkkijono (string) C:ssä, koska se loppuu '\0'-merkkiin (eli numeroon 0). Kääntäjä laskee automaattisesti sen koon (kolme) ja lisää '\0'-merkin, jolloin koko on neljä merkkiä.

        C:n merkkijono on siis merkkitaulukko jonka LOPETUSMERKKI (ei välttämättä viimeinen merkki) on '\0' eli numerona 0.

        '\0' takia voidaan käyttää while-silmukkaa:
        void str_shift(char *str, char shift)
        {
           int i = 0;

           while ( str[i] != 0) {
              str[i] = str[i] shift;
              i ;
           }
        }
        str_shift(str2, 3);
        (huomaa charia voi käsitellä kuin integeriä)



        Voidaan myös laittaa näin:

        char str3[21] = "abc";

        Jolloin loppuosa täytetään '\0'-merkeillä.

        Sinänsä oikeassa muodossa

        char etunimi[20 1] = {'M', 'a', 'i', 'j', 'a', '-', 'K', 'a', 'a', 'r', 'i', 'n', 'a', '\0'};

        ei ole paljon järkeä kun täysin sama on:

        char etunimi[20 1] = "Maija-Kaarina";

        HUOM!

        char *vakio = "abcde";

        EI OLE sama kuin

        char ei_vakio[] = "abcde";

        Edellistä ei voi muuttaa.
        http://c-faq.com/decl/strlitinit.html

        (Sitten on vielä dynaaminen varaus:
        char *str = (char *)malloc(40);)

        C:n merkkijono on niin alkeellinen ja sekava että sitä ei voi suositella aloittelijoille (eikä paljon muillekaan), joten käyttäkää C :n string-luokkaa (tai jotain muuta kieltä).


      • fdaa
        mjono kirjoitti:

        Menee vähän pieleen. Ensinnäkin merkkijono EI OLE merkkitaulukko!

        char arr1[3] = "abc";

        Nyt arr1 on 'merkki'- (tarkemmin ASCII-merkki) eli char-taulukko, mutta se EI OLE C:n tarkoittama merkkijono!

        char str2[] = "abc";

        str2 taasen on merkkijono (string) C:ssä, koska se loppuu '\0'-merkkiin (eli numeroon 0). Kääntäjä laskee automaattisesti sen koon (kolme) ja lisää '\0'-merkin, jolloin koko on neljä merkkiä.

        C:n merkkijono on siis merkkitaulukko jonka LOPETUSMERKKI (ei välttämättä viimeinen merkki) on '\0' eli numerona 0.

        '\0' takia voidaan käyttää while-silmukkaa:
        void str_shift(char *str, char shift)
        {
           int i = 0;

           while ( str[i] != 0) {
              str[i] = str[i] shift;
              i ;
           }
        }
        str_shift(str2, 3);
        (huomaa charia voi käsitellä kuin integeriä)



        Voidaan myös laittaa näin:

        char str3[21] = "abc";

        Jolloin loppuosa täytetään '\0'-merkeillä.

        Sinänsä oikeassa muodossa

        char etunimi[20 1] = {'M', 'a', 'i', 'j', 'a', '-', 'K', 'a', 'a', 'r', 'i', 'n', 'a', '\0'};

        ei ole paljon järkeä kun täysin sama on:

        char etunimi[20 1] = "Maija-Kaarina";

        HUOM!

        char *vakio = "abcde";

        EI OLE sama kuin

        char ei_vakio[] = "abcde";

        Edellistä ei voi muuttaa.
        http://c-faq.com/decl/strlitinit.html

        (Sitten on vielä dynaaminen varaus:
        char *str = (char *)malloc(40);)

        C:n merkkijono on niin alkeellinen ja sekava että sitä ei voi suositella aloittelijoille (eikä paljon muillekaan), joten käyttäkää C :n string-luokkaa (tai jotain muuta kieltä).

        "char *vakio = "abcde";

        EI OLE sama kuin

        char ei_vakio[] = "abcde";"

        Molemmat samaa tyyppiä; Toisen muuttaminen johtaa ei-määriteltyyn käyttäytymiseen.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Älä unohda minua

      Nainen ethän unohda minua. Asiat olisivat voineet mennä toisin, olisi vain pitänyt uskaltaa lähestyä sinua kun annoit si
      Ikävä
      80
      769
    2. On väärin

      Tykätä ja haluta sua kun tilanne täysin mahdoton mutta minkäs teet. Mun sisällä roihuaa 🔥 kunpa tietäisit mitä sä minus
      Ikävä
      43
      662
    3. Jorma Uotinen läväytti härskin heiton - Paljastus uudesta TTK-romanssista?

      Tuomari Jorma Uotisen linja on välillä hyvinkin rohkea TTK:ssa. Hän näpäytti Jaakko Parkkalille ja Kastanja Rauhalalle v
      Tanssii tähtien kanssa
      12
      648
    4. Valtuuston kokous

      Kyl tuo Anita Ruokani on ihan pihalla,käy aika hitaalla.
      Kemijärvi
      50
      589
    5. Tosi kiva on

      Joo. Mitä olisit menettänyt jos olisit paljastanut itsesi?
      Ikävä
      65
      571
    6. Mitä tunteita

      Sulla vielä on?
      Ikävä
      77
      514
    7. Nyt on nyt

      Turha miettiä menneitä tapahtumia. Niitä ei saa tekemättömäksi. Tärkeintä on mitä tekee nyt ja tulevaisuudessa. Korjausl
      Ikävä
      46
      409
    8. Miehelle

      ❤️
      Ikävä
      26
      409
    9. Saat mut hymyileen suuresti, ja odotan koska saan antaa sulle haleja ja pusuja ihan oikeasti

      En tiedä mikä sussa on, mut sun koko olemus ja ilmeet, ja persoona ja ulkonäkö saa mut vaan hyvälle tuulelle. Oot vaan s
      Ikävä
      14
      379
    10. Näin on!

      Päästy taas iltaan! Jee, päiviä taas yksi vähemmän meidän kohtaamiseen! ❤️
      Ikävä
      38
      371
    11. Martina avautuu

      Martina on päässyt kertomaan Feminassa konkurssistaan. On viettänyt monia unettomia öitä. On elänyt ikäänkuin painekatti
      Kotimaiset julkkisjuorut
      120
      368
    12. Hyvästi Iisalmen Citymarket.

      Nyt riitti huolimaton kassatoiminta!Nyt sattuu joka toisella käynnillä samaa,joko laskutettu samasta tuotteesta liian mo
      Iisalmi
      18
      352
    13. Kadutko mies?

      Silloin kuin vielä yritin lähestyä, etkä tarttunut siihen. Asioista pitäisi voida aina keskustella.
      Ikävä
      29
      349
    14. Se oikea.....

      Hän ei ole sinulle se oikea, jos hän pitää sinua vain yhtenä vaihtoehtona.
      Ikävä
      56
      347
    15. Mikä fiilis

      Onko asiat niin kuin hyvin?
      Ikävä
      59
      343
    16. Hyvää huomenta

      Eräälle Naiselle ❤️‍🩹
      Ikävä
      52
      338
    17. Kyllä ymmärrän sinua

      Mutta silti se sattuu….
      Ikävä
      26
      335
    18. Kaivatun haluaminen

      seksuaalisesti herättää syvältä selkärangasta esiin villieläimellisiä vaistoja sekä haluja peittäen sivistyneen ihmisenä
      Ikävä
      27
      334
    19. Mitä järkeä kiusata ihmisiä palstalla

      Luuleeko ne kiusaajat oikeasti, että joku tosissaan ajattelisi niiden haukkujen olevan itselle? Hukkaan menee kiusaajill
      Ikävä
      89
      328
    20. Suutuin tässä aiemmin siitä

      Kun et halua olla irl missään tekemisissä minun kanssa.
      Ikävä
      28
      323
    Aihe