katso otsikkoa
Mitä tarkoittaa merkkitaulukko?
3
1255
Vastaukset
- 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
En minä kyllä enää odota sinua
Olet siellä sen harmaan kanssa. Niin, annoit minun nähdä lämpimät tunteesi siitä huolimatta. Se merkitsi kyllä paljon. O351846Jos joku luulee että kaikki käy
Sanon vain tämän. Minun kanssani ei neuvotella. Minun kanssani eletään tasavertaisesti. Jos se on liikaa, niin ovi rinn601465Taas pedofiliatuomio Haapaveelle
Vastenmielisiä ja vakavia rikostapauksia pikkupaikkakunnan alueellekin näyttää riittävän. Tämän alan rikoksien tuomiot361415Joka kolmas työtön on työkyvytön
Viime vuonna työnhakuvelvoitteen ulkopuolella oli noin kolmannes työttömistä työnhakijoista. Huhheijaa, mihin suomalais1651328Sakin hivutus - ilmiö
Miten tuollainen tuollainen ilmiö kuin ”sakin hivutus” syntyy? Mitä syitä ilmiön syntymiseen tarvitaan? Onko sakissa jok681219Ei ole rohkeutta tulla jututtamaan
Voidaan me nähdä ja tervehtiä, sitäkin harvoin, mutta iso kynnys on edes mennä lähelle ja kysyä kuulumisia. Ymmärrät var81201Julkinen saunatilanne Haapavedellä, tämä on täyttä paskaa!
Eilen Haapaveden uimahallin saunassa koettu tilanne oli täysin käsittämätöntä ja helvetin järkyttävää. Ladyboy harjoitti19856- 58818
Mitä tapahtuu?
Mitä säpäkän risteyksessä on tapahtunut kun poliiseja, ambulansseja ja kopteri paikalla?12794Kuhmon K-kaupan vanhenevat hapannaamat kassoilla
Pitemmän aikaa olen ihmetellyt kaverin kanssa miksi Kuhmon K-kaupassa on aina tympeimmät kassattöntekijät? Kesällä tulee14745