// Plik ten zawiera cztery projekty ilustrujące użycie funkcji znakowych

Transkrypt

// Plik ten zawiera cztery projekty ilustrujące użycie funkcji znakowych
// Plik ten zawiera cztery projekty ilustrujące użycie wybranych funkcji znakowych
// i funkcji łańcuchowych strchr, strstr i strtok.
//
Projekt1 - identyfikatory
#include<stdio.h>
#include<conio.h>
#include <string.h>
//--------------------------------------------------------------------------#include <ctype.h>
#pragma hdrstop
//--------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[])
{
char identifier[10]="name";
char *tablan[5];
unsigned int i;
for (i=0;i<argc;i++)
printf("\n argument nr %d=%s",i,argv[i]);
getch();
while (1)
{
clrscr();
fflush(stdin);
printf("\n Podaj identyfikator:");
gets(identifier);
if (!isalpha(identifier[0])&&identifier[0]!='_')
{
puts(" Identyfikator niepoprawny");
getch();
exit(1);
}
for (i=1;i<strlen(identifier);i++)
if (!isalnum(identifier[i])&&identifier[i]!='_')
{
puts(" Identyfikator niepoprawny");
getch();
exit(1);
}
puts("Identyfikator poprawny");
getch();
}
return 0;
}
//---------------------------------------------------------------------------
//
Projekt2 strchr
#include<stdio.h>
#include<conio.h>
#include <string.h>
//--------------------------------------------------------------------------#include <ctype.h>
#pragma hdrstop
//--------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[])
{
char s[20]="__abbbaccafbbbfnnf";
char *ps1,*ps2;
int i,licznik;
//Wyszukiwanie pierwszego wystapienia 'a' w s
ps1=s;
ps1=strchr(ps1,'a');
if (ps1!=NULL)
{
printf("\n Znak %c znajduje sie na pozycji %d",'a',ps1-s);
// ps1-s jest odejmowaniem wskaźników, wynikiem jest ilość elementów
// typu wskazywanego przez wskaźnik, położonych pomiędzy miejscami
// wskazywanymi przez wskaźniki ps1 i s
//Wyszukiwanie drugiego wystąpienia 'a' w s
// Wskaźnik będący pierwszym argumentem strchr, wskazuje na następną pozycję
// za znalezionym wystąpieniem znaku 'a'
ps1=strchr(ps1+1,'a');
if (ps1!=NULL)
printf("\n Drugi znak %c znajduje sie na pozycji %d",'a',ps1-s);
else
printf("\n Brak drugiego wystapienia %c ",'a');
getch();
}
licznik=0;
ps1=s;
while(ps1)
{
ps1=strchr(ps1,'f');
if (ps1==NULL&&!licznik) printf("\n Znak %c nie wystepuje w s",'f');
else
if (ps1==NULL&&licznik) printf("\n Brak kolejnych wystapien %c w s",'f');
else
{
printf("\n Znak %c znajduje sie na pozycji %d",'f',ps1++-s);
licznik++;
}
}
getch();
return 0;
}
//---------------------------------------------------------------------------
//
Projekt 3 - strstr
#include<stdio.h>
#include<conio.h>
#include <string.h>
//--------------------------------------------------------------------------#include <ctype.h>
#pragma hdrstop
//--------------------------------------------------------------------------#pragma argsused
int main(int argc, char* argv[])
{
char s[50]="__aabbbaaccaacc_____cc__cc_cc";
char lan[3]="cc"; //lancuch poszukiwany
char *ps1,*ps2;
int i,sig=0;
// Sprawdzanie pierwszego i drugiego wystapienia lancucha lan
// w lancuchu s.
printf(" Wyszukiwanie pierwszych dwoch wystapien lan w s\n");
ps1=strstr(s,lan);
if (ps1) // jeżeli łancuch s zawiera łańcuch lan, to zwracany jest
// wskaźnik do pierwszego znaku pierwszego wystąpienia
// łańcucha lan w łańcuchu s
{
printf("\n Lancuch %s znajduje sie na pozycji %d",lan,ps1-s);
ps1=strstr(ps1+strlen(lan),lan);
if (ps1)
printf("\n Drugie wystapienie lancucha %s znajduje sie na pozycji %d",lan,ps1-s);
else printf("\n Brak drugiego wystapienia lancucha %s w s", lan);
}
else printf("\n Lancuch %s nie wystepuje w s", lan);
getch();
// Sprawdzanie wszystkich wystapien lancucha lan w lancuchu s
ps1=s;
sig=0;
printf("\n\n\n Wyszukiwanie wszystkich wystapien lan w s\n");
while(ps1)
{
ps1=strstr(ps1,lan);
sig=1;
if (ps1)
{
printf("\n Lancuch %s znajduje sie na pozycji %d",lan,ps1-s);
ps1=ps1+strlen(lan);
}
}
if (!sig) printf("\n Lancuch %s nie wystepuje w s",lan);
getch();
return 0;
}
//
Projekt 4 - strtok
#include<stdio.h>
#include<conio.h>
#include <string.h>
//--------------------------------------------------------------------------#include <ctype.h>
#include <stdlib.h>
#pragma hdrstop
void wyszukiwanie_pojedynczych_wyrazow(void);
void wyszukiwanie_w_petli(void);
//--------------------------------------------------------------------------/*char *strtok (char *s, const char *ct)
Wyszukuje w tablicy s ciągi znaków przedzielone znakami z tablicy ct.
Kolejne wywołania tej funkcji dzieli tablice s na ciągi znaków rozdzielone znakami
z tablicy ct. Funkcja po wywołaniu znajduje pierwszy ciąg znaków nie należących
do ct. Znak następny zastępowany jest znakiem /0 i zwracany jest wskaźnik
do początku tego ciągu. Każde następne wywołanie tej funkcji musi być
z argumentem s równym NULL, wówczas zwracany jest kolejny ciąg znaków,
przy czym szukanie rozpoczyna się za końcem poprzedniego ciągu. Zwraca NULL,
gdy nie znajduje ciągów. Każde następne wywołanie może być z innym argumentem ct.*/
#pragma argsused
int main(int argc, char* argv[])
{
wyszukiwanie_pojedynczych_wyrazow();
wyszukiwanie_w_petli();
getch();
return 0;
}
//--------------------------------------------------------------------------void wyszukiwanie_pojedynczych_wyrazow(void)
{
char s[50]="nazwisko imie rok wydzial";
char *ps1;
printf("Funkcja strtok-wyszukiwanie dwoch kolejnych wystapien ciagu znakow");
ps1=strtok(s," ");
if (ps1)
printf("\n wyraz 1=%s",ps1);
else
{
printf("\n Brak wystapien wyrazow");
getch();
exit(0);
}
ps1=strtok(NULL," ");
if (ps1)
printf("\n Wyraz 2=%s",ps1);
else
{
printf("\n Brak drugiego wyrazu");
getch();
exit(0);
}
}
void wyszukiwanie_w_petli(void)
{
char s[50]="nazwisko imie rok wydzial";
char *ps1;
int i;
printf("\n\n\nFunkcja strtok -wyszukiwanie ciagu znakow w petli");
ps1=strtok(s," ");
if (ps1)
printf("\n Wyraz 1=%s",ps1);
else
{
printf("\n Brak wystapien wyrazow");
getch();
exit(0);
}
i=2;
while(ps1=strtok(NULL," "))
printf("\n wyraz %d=%s",i++,ps1);
getch();
}