MERKKIJONOJEN MUOKKAUS

C-kielessä ei ole erityistä muuttujatyyppiä merkkijonoille. Merkkijonot ovat todellisuudessa merkkitaulukoita. Tästä johtuu että C:n operaattorit eivät salli yhden merkkijonon sijoittamista toiseen. C sisältää kuitenkin ryhmän funktioita, jotka mahdollistavat merkkijonojen muokkauksen.

Funktio Kuvaus strlen() palauttaa merkkijonon pituuden strchr() hakee merkin ensimmäisen esiintymiskohdan strcmp() vertaa kahta merkkijonoa strcat() liittää merkkijonon toiseen strcpy() kopioi merkkijonon toiseen

HUOM! Ylläolevien funktioiden käyttö edellyttää, että otsikkotiedosto string.h on sisällytetty ohjelmaan. Tiedosto lisää tarvittavat funktioprototyypit ohjelman käyttöön.


strlen( ) FUNKTIO

Funktio palauttaa merkkijonon pituuden alkukohdasta loppumerkkiin ( '\0').

size = strlen(string);

string on merkkitaulukko (tai -jono), jonka pituus halutaan määrittää, ja tunniste size tallentaa tuloksena olevan merkkijonon pituuden.

#include <string.h> int x; char str[45] = ”Merkkijonon sisältö”; x = strlen(str);

Esim.

/* Merkkijonon pituus */ #include <stdio.h> #include <string.h> int main() { char str1[] = "Tama on testi"; printf("%s \n on %d merkkia pitka", str1, strlen(str1)); getch(); return 0; }




strchr( ) FUNKTIO

Funktiota strchr() käytetään etsimään tietyn merkin ensimmäinen esiintymispaikka merkkijonossa. Merkkijonon loppumerkki (NULL) sisältyy etsintään, joten funktio soveltuu myös merkkijonon NULL-merkin etsintään. Mikäli kyseinen merkki löydetään, funktio palauttaa osoittimen merkin esiintymiskohtaan merkkijonossa.

Funktion strchr() määrittely:

char *strchr(const char *s, int c);

Lauseessa *s on osoitin merkkiin ja c on etsittävä merkki. Funktio palauttaa osoittimen haluttuun merkkijonon merkkiin.

include <string.h> include <stdio.h> char str[15]; char *ptr; strcpy(string, ”Jack ja Jill”); ptr = strchr(string, ‘n’); if (ptr) printf(”Merkki ‘n’ on kohdassa: %d\n”, ptr->string); else printf(”Merkkiä ei löytynyt\n”);

Esimerkki-ohjelma (alla). Ohjelma pyytää kirjoittamaan tekstiä, tekstin syöttäminen lopetetaan painamalla ENTER. Tämän jälkeen ohjelma pyytää kirjainta, joita etsitään annetusta tekstistä. Ohjelma näyttää sanat joissa kirjain esiintyy.

/* Merkin etsiminen merkkijonosta */ #include <string.h> #include <stdio.h> int main() { char str[80], ch; char *location; puts("Anna merkkijono: "); gets(str); puts("Anna haettava merkki: "); ch = getchar(); location = strchr(str, ch); if (location == NULL) puts("\nMerkkia ei ole puskurissa"); else printf("\nMerkkijono on kohdassa: %s", location); getch(); return 0; }




strcmp( ) FUNKTIO

Kahden merkkijonon vertailuun käytetään funktiota strcmp(). C-kielessä ei voi käyttää operaattoreita merkkijonojen vertailuun on tätä toimenpidettä varten oma sisäänrakennettu funktio.

Funktion strcmp() määrittely:

int strcmp(const char *s1, const char *s2);

Funktio ottaa kaksi parametria, kaksi vertailtavaa merkkijonoa. Parametreja edustavat koodissa tunnisteet *s1 ja *s2. Funktio palauttaa arvon tosi, jos merkkijonot ovat yhtäläiset, muutoin arvo on epätosi

strcmp(”p”, ”p”);

Kyseinen koodi palauttaa arvon tosi. Funktio tunnistaa ja erottelee isot ja pienet kirjaimet. Mikäli funktiolle välitetään kaksi merkkijonoa joista toinen on isoilla ja toinen pienillä kirjaimilla, funktio palauttaa arvon epätosi, vaikka merkkijonot olisivat muutoin samanlaiset.


strcat( ) FUNKTIO

Funktiota käytetään yhdistämään kaksi merkkijonoa. Funktiolle välitetään parametrina kaksi merkkijonoa. Funktio lisää toisen merkkijonon ensimmäiseen ja päättää tuloksena olevan merkkijonon NULL-merkkiin.

Funktion strcat() määrittely:

char *strcat(char *test, const char *src);

Tunniste *src on osoitin ensimmäiseen merkkijonoon ja *test osoitin kohdemerkkijonoon. Funktio palauttaa osoittimen yhdistettyyn merkkijonoon.

char destination[25]; char *space = ” ”, *one = ”One”, *two = ”Two”; strcpy = (destination, two); strcpy = (destination, space); strcpy = (destination, one); printf(”%s\n”,destination);

Esim.

/*Merkkijonojen yhdistäminen*/ #include <stdio.h> #include <string.h> int main() { char etunimi[50]; char toinen_etunimi[15]; char sukunimi[15]; puts("Kirjoita etunimesi: "); gets(etunimi); puts("Anna toinen etunimi: "); gets(toinen_etunimi); puts("Kirjoita sukunimesi"); gets(sukunimi); strcat(etunimi, " "); strcat(etunimi, toinen_etunimi); strcat(etunimi, " "); strcat(etunimi, sukunimi); printf("\nHei, %s\n", etunimi); getch(); return 0; }




strcpy( ) FUNKTIO

Yhden merkkijonon kopioimiseen toiseen merkkijonoon käytetään funktiota strcpy(). Funktio käyttää kahta parametria ja kopioi toisen merkkijonon ensimmäiseen merkkijonoon. Merkkijonon päättävä NULL-merkki kopioidaan myös toisesta merkkijonosta ja ensimmäisestä merkkijonosta tulee täydellinen toisen merkkijonon kopio..

Funktion strcpy() määrittely:

char *strcpy(char *test, const char *src);

Tunniste *src on osoitin lähdemerkkijonoon ja *test taas osoitin kohdemerkkijonoon. Funktio palauttaa osoittimen kopioituun merkkijonoon.

char str1[60] = ”Kopioitava merkkijono”; char str2[60]; strcpy(str2, str1); printf(”%s”, str1);

Kääntäjistä löytyy vielä muita funktioita merkkijonojen muokkaamiseen kuten kirjainten muuttaminen isoiksi tai pieniksi kirjaimiksi, merkkijonojen kääntäminen ym. Nämä funktiot löytyvät kääntäjän manuaaleista.