katso otsikkoa
Mitä tarkoittaa merkkitaulukko?
3
1266
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
Selvästi näyttää siltä, että SDP:n kannattajat hyväksyy kiusaamisen
ja seksuaalisen ahdistelun, kun puolueen kannatus pysyy korkealla. Mitä tämä kertoo demari-äänestäjien moraalista?1373546Päivi Räsäsen seksipaljastus loksauttaa Katja Ståhlin leuat! Elämäni biisi kohujakso tv:ssä!
Elämäni biisi -suosikkisarjan uusinnat ovat startanneet ja nyt vuorossa on sarjan 2. jakso v. 2019. Sinisille sohville553121Muistan vuosikymmenten takaa
Toivottavasti voit hyvin ja jaksat työssäsi. Olet upea ja erinomainen ihminen, toivon kaikkea hyvää.122584Montako mitalia Suomi saa talviolympialaisista?
Nyt heittäkää veikkaus Suomen mitalisaldosta ja mistä lajeista metallilätkät tulevat. Oma veikkaukseni on 6 mitalia. -1152141- 1711786
Kokemuksia Rehux Oy yrityksestä työpaikkana?
Jonkin aikaa seurannut kyseistä firmaa sivusta, näyttäisi, että tälläkin hetkellä olisi peräti 3 eri roolia tai paikkaa311346- 541172
IS: Riitta Väisänen kärsii ikävästä vaivasta - Vaipparalli ja 40 antibioottikuuria takana...
71-vuotias Riitta Väisänen on kertonut tuoreista terveysongelmistaan. Väisänen on kertonut julkisuudessa jo aiemmin vaih16953Jos mies oikeasti haluaa sinut
Hän ei ota riskiä että menettäisi sinut. Ei pienintäkään. Mies ei jätä vastaamatta viesteihin eikä pidä sinua epätietois110923Polvinen hylkäsi Persut
Polvinen teki ratkaisun, lähti Persujen paraati paikalta. Moni on jättänyt puolueen tavallisten kansalaisten joukosta.158922