katso otsikkoa
Mitä tarkoittaa merkkitaulukko?
3
1239
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
- 1077793
Siekkilässä ajettu ihmisten yli- mitä tapahtui? Länsi-Savo ei ole uutisoinut asiata
Manneja, vaiko matuja?1136064- 835197
- 1394556
Alavuden sairaala
Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan113230- 623024
- 582948
Törkeää toimintaa
Todella törkeitä kaheleita niitä on Ylivieskassakin. https://www.ess.fi/uutissuomalainen/8570818102454- 612437
Hei........
Pelkkä sun näkeminen saa mut hymyilemään pitkin iltaa. Oot niin 🤩😘 Edellinen poistettiin.562066