Karaktersorozatok (sztringek)

A sztringeket a C karakter tömbként kezeli. A sztring utolsó karaktere: '\0'. Ha karaktersorozatokkal akarunk dolgozni, akkor kész függvények állnak a rendelkezésünkre, ha behívjuk a string.h standard könyvtárat. Néhányat bemutatok ezek közül, ezeket a későbbiekben pontosítani fogjuk:
strcpy(s1, s2); az s2 karaktersorozatot az s1-be másolja
strcat(s1, s2); az s2-t s1 után illeszti (s1-től levágja a '\0'-t.
int strcmp(s1, s2); Összehasonlítja az s1 karaktersorozatot az s2 karaktersorozattal. Az eredmény kisebb, mint 0, ha s1 kisebb, mint s2; egyenlő 0, ha a két sztring egyenlő és nagyobb, mint 0, ha s2 nagyobb, mint s1. Mivel a sztringek összetett adatok, nem alkalmazhatóak a <, = és > operátorok.
int strlen(s); az s karaktersorozat hosszát adja vissza. ('\n' nélkül)

Írjuk meg mi az strlen() függvényt, majd hívjuk meg! Nevezzük hossz()-nak.

#include <stdio.h>
#include <stdlib.h>

int hossz(char str[]){
   int i = 0;
   for(;str[i]!='\0';i++); //hogy a 'csába, pontosvessző a for után???
   return i;
}

int main(){
   char sztring[] = "micimaci";
   printf("\nA(z) \"%s\" sztring hossza: %d\n", sztring, hossz(sztring));
   system("PAUSE");
   return 0;
}


A következő feladatunk az lesz, hogy fordítsunk meg egy sztringet. Nézzük mindjárt a kódot:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int megfordit(char str[]){
   char ch;
   int i, j=strlen(str);
   for(i=0;i<strlen(str);i++){
      j--;
      ch = str[i];
      str[i] = str[j];
      str[j] = ch;
   }
}

int main(){
   char sztring[] = "mazsola";
   puts(sztring);// Ez a függvény is kiírja a sztringet.
   megfordit(sztring);
   puts(sztring);
   system("PAUSE");
   return 0;
}


Megfigyelhetjük, hogy deklaráláskor str[]-t írtunk, függvényhíváskor pedig csak egyszerűen str-t (azaz nem utaltunk arra, hogy str egy karaktersorozat vagy tömb). Ennek a magyarázata elég bonyolult, ismernünk kell a mutató fogalmát, ami később következik, így egyelőre fogadjuk el, hogy ez így működik.

A következő program összeszámolja a magánhangzókat egy sztringben. Ha a fordító nem használ megfelelő kódtáblát, akkor előfordulhat, hogy csak angol szavakra működik helyesen a program.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int mgh(char ch){ //a visszatérési érték 1, ha magánhangzó, különben 0.
    ch = tolower(ch);
    switch (ch){
       case 'a' :;
       case 'á' :;
       case 'e' :;
       case 'é' :;
       case 'i' :;
       case 'í' :;
       case 'o' :;
       case 'ó' :;
       case 'ö' :;
       case 'ő' :;
       case 'u' :;
       case 'ú' :;
       case 'ü' :;
       case 'ű' :;
          return 1;
    default : return 0;
    }
} // a függvéní akkor működik helyesen, ha megfelelő kódtáblát használ a fordító

int main(int argc, char *argv[])
{
    char str[50];
    int i, m=0; //az m-ben tároljuk a magánhangzók számát
    scanf("%s", str); //itt nem kell &, erről majd később...
    for(i=0;i        if(mgh(str[i]))
          m++;
    }
    printf("\nA \"%s\" sztringben magánhangzók száma: %d\n", str, m);
    system("PAUSE");
    return 0;
}