// 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(); }