Łańcuchy znakowe

W języku C nie ma czegoś takiego jak string. Wszystkie napisy zapisywane są w tablicach. Oczywiście w standardowych bibliotekach można znaleźć funkcje ułatwiające obsługę tablic znakowych. Do dyspozycji mamy bibliotekę string.h a najważniejsze funkcje tej biblioteki zaprezentuje poniżej.

strchr() - Określa położenie znaku wewnątrz łańcuchu.

strstr() - Określa położenie jednego łańcucha znaków wewnątrz drugiego.

strcmp() - Porównuje dwa łańcuchy znaków.

strlen() - Określa długość łańcucha.

strcpy() - kopiuje jeden łańcuch do drugiego.

strcat() - Łączy dwa łańcuchy znaków.

Ja głównie używam funkcji strlen(), która potrafi określić długość łańcucha oraz funkcji strstr(), która potrafi odszukać określony ciąg znaków w innym łańcuchu oraz podać jego adres w pamięci. Gdy funkcja strstr() zwróci wartość 0, to znaczy, że w łańcuchu nie ma szukanego ciągu znaków. W innym przypadku zwróci adres komórki pamięci w której znajduje się pierwsza litera szukanego ciągu znaków. Mając adres komórki w pamięci i wiedząc, że element char zajmuje 8 bitów= 1 bajt w łatwy sposób można obliczyć, gdzie znajduje się szukany łańcuch.

Dla przykładu:

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

int main(int argc, char *argv[]) {
 char tab[] = "avrkwiat.nstrefa.pl"; 
 char szukana[]="strefa";
 if (strstr(tab,szukana)){
 printf("Szukany napis to: '%s' i znajduje sie w pamieci o adresie %p \n",szukana,strstr(tab,szukana));
 printf("napis jest na %i miejscu i ma %i liter",strstr(tab,szukana)-tab, strlen(szukana));
 }
 return 0;
}

Po odpaleniu programu dostaniemy napis:

Szukany napis to: 'strefa' i znajduje sie w pamieci o adresie 0022FEE6
napis jest na 10 miejscu i ma 6 liter

Oczywiście adres w pamięci może być inny dla różnych, ale reszta będzie taka sama na każdym komputerze.