Mitä tarkoittaa merkkitaulukko?

sdfd

katso otsikkoa

3

1258

    Vastaukset

    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. Hyvää syntymäpäivää Sanna 40 vee!!!!

      ᕼᗩᑭᑭY ᗷIᖇTᕼᗞᗩY Sister ❣️🥰 🎉🎂✨🍰🥳 🥳🎂🥂 🎉🎊🎁🎈🎂
      Maailman menoa
      126
      5636
    2. Suomen kaksikielisyys - täyttä huuhaata

      Eivätkö muuten yksilöt pysty arvioimaan mitä kieliä he tarvitsevat? Ulkomaalaiselle osaajalle riittää Suomessa kielitai
      Maailman menoa
      97
      4857
    3. Työeläkeloisinta 27,5 mrd. per vuosi

      Tuo kaikki on pois palkansaajien ostovoimasta. Ja sitten puupäät ihmettelee miksei Suomen talous kasva. No eihän se kas
      Maailman menoa
      140
      4814
    4. Mikä on vaikeinta siinä, että menetti yhteyden kaivattuun, jota vielä ajattelee?

      Mikä jäi kaihertamaan? Jos jokin olisi voinut mennä toisin, mitä se olisi ollut? Mitä olisit toivonut vielä ehtiväsi san
      Ikävä
      393
      2380
    5. Kerro kaivattusi etunimi

      Miehille..
      Ikävä
      130
      2286
    6. Persut rahoittavat velkarahalla rikkaiden ökyelämää

      Minkä vuoksi persut eivät leikkaa rikkailta, joilla on maksukykyä? Tuskinpa tuo persujen käytös saa Suomen kansalta hyv
      Maailman menoa
      2
      1997
    7. Paljonko sinulla ja kaivatullasi on ikäeroa??

      Ikä on vain numeroita 😁
      Rakkaus ja rakastaminen
      109
      1876
    8. Sulla on mies

      Aivan liikaa naisia.
      Ikävä
      256
      1607
    9. 382
      1363
    10. Pääsit koskettamaan

      Sellaista osaa minussa jota kukaan ei ole ennen koskettanut. Siksi on hyvin vaikea unohtaa sinut kokonaan.
      Ikävä
      60
      1203
    Aihe