zajęcia nr 11 - Politechnika Białostocka
Transkrypt
zajęcia nr 11 - Politechnika Białostocka
Informatyka 1 zajęcia nr 11 Elektrotechnika, semestr II rok akademicki 2008/2009 mgr inż. Paweł Myszkowski Plan dzisiejszych zajęć 1. Łańcuchy znaków 2. Wprowadzanie i wyprowadzanie znaków i łańcuchów znaków 3. Funkcje z modułu <string.h> 4. Zadania do zrobienia 1 1. Znaki i łańcuchy znaków Łańcuchy znakó znaków: - tablice znakó znaków zakoń zakończone pewnym znakiem sterują sterującym (\ (\0), - typem bazowym jest typ char, char, - wprowadzają wprowadzając łańcuchy znakó znaków w kodzie programu uż używamy cudzysł cudzysłowó owów. 79 116 ‘O’ ‘t’ 0 1 111 32 ‘o’ ‘ ‘ 2 3 116 101 107 115 116 ‘t’ ‘e’ ‘k’ ‘s’ ‘t’ ‘\0’ 4 5 6 7 8 0 9 1. Znaki i łańcuchy znaków Deklaracja łańcucha znakó znaków: a) jako tablica znakó znaków: char tekst[20]; //20//20-elementowa tablica znakó znaków //tu od razu przydzielana jest pamięć pamięć b) jako wskaź wskaźnik: char *tekst; //tu nie ma przydział przydziału pamię pamięci [o wskaź wskaźnikach wię więcej na osobnych zaję zajęciach] 2 1. Znaki i łańcuchy znaków Przypisywanie wartoś wartości do łańcucha znakó znaków: a) jeś jeśli deklarujemy jako tablica: 1) char tekst[20]=„ tekst[20]=„Oto tekst” tekst”; //tak moż można 2) char tekst[20]={‘ tekst[20]={‘O’,’t’,’o’,’ ‘,’t’,’e’,’k’,’s’,’t’,’\0’}; //tak moż można, ale to niezbyt praktyczne 3) char tekst[20]; tekst=„ tekst=„Oto tekst” tekst”; //tak nie moż można!!! Tu należ należy uż użyć funkcji strcpy() strcpy() lub memcpy() memcpy() 1. Znaki i łańcuchy znaków b) jeś jeśli deklarujemy jako wskaź wskaźnik: char *tekst; tekst=„ tekst=„Oto tekst” tekst”; //tak moż można, ale tylko pierwszy raz, bo wtedy przydzielana jest pamięć pamięć Znak a łańcuch: cuch: ‘a’ – dokł dokładnie jeden znak „a” – łańcuch znakó znaków, czyli dwa znaki: ‘a’ i ‘\0’ 3 2. Wprowadzanie i wyprowadzanie… Wprowadzanie znakó znaków i łańcuchó cuchów znakó znaków: 1) scanf – omawiane wcześ wcześniej 2) getch, getch, getchar – do wprowadzania znakó znaków char znak; printf("Podaj jeden znak"); znak=getchar(); znak=getchar(); 3) gets – do wprowadzania łańcuchó cuchów znakó znaków char *napis; printf("Podaj łańcuch znakó znaków"); gets(napis); gets(napis); 2. Wprowadzanie i wyprowadzanie… Wyprowadzanie znakó znaków i łańcuchó cuchów znakó znaków: 1) printf – omawiane wcześ wcześniej 2) putc, putc, putchar – do wyprowadzania znakó znaków char znak='A'; znak='A'; printf("Oto znak: "); putchar(znak); putchar(znak); 3) puts – do wyprowadzania łańcuchó cuchów znakó znaków char *nazwa="Politechnika *nazwa="Politechnika Biał Białostocka"; printf("Nazwa naszej uczelni to: "); puts(nazwa); puts(nazwa); 4 3. Funkcje z modułu <string.h> char* strcpy(char strcpy(char *dest, dest, const char *src *src)) kopiuje łańcuch znakó znaków z src do dest char *napis1="kopia", *napis2; Funkcjonalnie tak, jak strcpy(napis2,napis1); dest = src char* strdup(const strdup(const char *src *src)) tworzy kopię kopię łańcucha src i zwraca ją ją char *napis="tekst ", *kopia; *napis="tekst", kopia=strdup(napis); kopia=strdup(napis); char* strcat(char strcat(char *dest, dest, const char *src *src)) dołą łącza cza ł a ń cuch src na koniec ł a ń cucha dest do char *napis1="sklejony ", *napis2="napis"; strcat(napis1,napis2); //tu w napis1 mamy łańcuch "sklejony napis" 3. Funkcje z modułu <string.h> int strlen(const strlen(const char *str *str)) wyznacza i zwraca dł długość ugość (ilość (ilość znakó znaków) łańcucha str (bez znaku '\ '\0') char *napis="d *napis="dłługi napis do zbadania"; int dl=strlen(napis); dl=strlen(napis); int strcmp(const strcmp(const char *str1 *str1,, const char *str2 *str2)) poró porównuje łańcuchy znakó znaków; gdy są są równe – zwraca zero, jeż ż eli str1<str2 zwraca liczbę je liczbę ujemną ujemną, a jeś jeśli str1>str2 – zwraca liczbę liczbę dodatnią dodatnią char *napis1="tekst", *napis2="inny"; if (strcmp(napis1,napis2)==0) puts("Identyczne"); puts("Identyczne"); 5 3. Funkcje z modułu <string.h> char* strlwr(char strlwr(char *str) str) zamienia w łańcuchu str wielkie litery na mał małe, nie zmieniają zmieniając innych znakó znaków char *napis="D napis="Dł ł UgI nApIs Do ZmIaNy"; * ZmIaNy"; strlwr(napis); strlwr(napis); char* strupr(char strupr(char *str) str) zamienia w łańcuchu str mał małe litery na wielkie, nie zmieniają zmieniając innych znakó znaków char *napis="D *napis="DłłUgI nApIs Do ZmIaNy"; ZmIaNy"; strupr(napis); strupr(napis); char* strrev(char strrev(char *str) str) odwraca kolejność kolejność znakó znaków w łańcuchu str char *napis="Napis *napis="Napis do odwró odwrócenia"; strrev(napis); strrev(napis); 3. Funkcje z modułu <string.h> char* strtok(char strtok(char *napis, napis, char* separatory) separatory) dzieli łańcuch napis na częś ci wedł części według dzielą dzielących je separatoró separatorów char* element, *sep = " ,!?"; char* zdanie = "To jest nasze pię piękne, dł długie zdanie! Podoba się się?" element = strtok(zdanie, strtok(zdanie, sep); do { printf("%s\ printf("%s\n", element); } while((element=strtok(NULL, while((element=strtok(NULL, sep)) != NULL); 6 3. Funkcje z modułu <string.h> Funkcje do konwersji danych (zmiany typu): float atof(char atof(char *napis) napis) konwertuje łańcuch napis na liczbę liczbę typu float char* tekst = "3.14159"; float liczba=atof(tekst); liczba=atof(tekst); float atoi(char atoi(char *napis) napis) konwertuje łańcuch napis na liczbę liczbę typu int char* tekst = "12345"; int liczba=atoi(tekst); liczba=atoi(tekst); 3. Funkcje z modułu <string.h> Funkcje do konwersji danych (zmiany typu): float itoa(int itoa(int liczba, liczba, char *napis, *napis, int syst) syst) konwertuje liczbę liczbę typu int na łańcuch znakó znaków int liczba=123; char* tekst[20]; itoa (liczba,tekst,10); //10 oznacza system dziesię dziesiętny 7 3. Funkcje z modułu <string.h> Funkcje do sprawdzania rodzaju znaku: isalnum() – sprawdza czy to znak alfanumeryczny isalpha() – sprawdza czy to znak alfabetyczny isascii() - sprawdza czy to znak ascii isdigit() - sprawdza czy to cyfra isgraph() - sprawdza czy jest graficzny islower() – sprawdza czy to mała litera ispunct() – sprawdza czy to znak interpunkcyjny isspace() - sprawdza czy to spacja isupper() – sprawdza czy to wielka litera toascii() –konwertuje znak na kod ascii tolower() – konwertuje literę na małą toupper() – konwertuje literę na dużą Dziękuję za uwagę 8