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 w i łańcuchów w znaków 3. Funkcje z modułu u <string.h< 4. Zadania do zrobienia 1
1. Znaki i łańcuchy znaków Łańcuchy znaków: - tablice znaków w zakończone pewnym znakiem sterującym (\0),( - typem bazowym jest typ char, - wprowadzając łańcuchy znaków w w kodzie programu używamy u cudzysłow owów. 79 116 111 32 116 101 107 115 116 0 O t o t e k s t \0 0 1 2 3 4 5 6 7 8 9 1. Znaki i łańcuchy znaków Deklaracja łańcucha znaków: a) jako tablica znaków: char tekst[20]; //20-elementowa tablica znaków //tu od razu przydzielana jest pamięć b) jako wskaźnik: char *tekst; //tu nie ma przydziału u pamięci [o wskaźnikach więcej na osobnych zajęciach] 2
1. Znaki i łańcuchy znaków Przypisywanie wartości do łańcucha znaków: a) jeśli deklarujemy jako tablica: 1) char tekst[20]= Oto tekst ; //tak można 2) char tekst[20]={ O, t, o,, t, e, k, s, t, \0 }; //tak można, ale to niezbyt praktyczne 3) char tekst[20]; tekst= Oto tekst ; //tak nie można!!! Tu należy y użyću funkcji strcpy() lub memcpy() 1. Znaki i łańcuchy znaków b) jeśli deklarujemy jako wskaźnik: char *tekst; tekst= Oto tekst ; //tak można, ale tylko pierwszy raz, bo wtedy przydzielana jest pamięć Znak a łańcuch: a dokładnie jeden znak a łańcuch znaków, czyli dwa znaki: a i \0 3
2. Wprowadzanie i wyprowadzanie Wprowadzanie znaków w i łańcuchów w znaków: 1) scanf omawiane wcześniej 2) getch, getchar do wprowadzania znaków char znak; printf("podaj jeden znak"); znak=getchar(); 3) gets do wprowadzania łańcuchów w znaków char *napis; printf("podaj łańcuch znaków"); gets(napis); 2. Wprowadzanie i wyprowadzanie Wyprowadzanie znaków w i łańcuchów w znaków: 1) printf omawiane wcześniej 2) putc, putchar do wyprowadzania znaków char znak='a'; '; printf("oto znak: "); putchar(znak); 3) puts do wyprowadzania łańcuchów w znaków char *nazwa="politechnika* Białostocka"; printf("nazwa naszej uczelni to: "); puts(nazwa); 4
3. Funkcje z modułu u <string.h< char* strcpy(char *dest, const char *src* src) kopiuje łańcuch znaków w z src do dest char *napis1="kopia", *napis2; strcpy(napis2,napis1); char* strdup(const char *src* src) tworzy kopię łańcucha src i zwraca jąj char *napis="tekst* napis="tekst", ", *kopia; kopia=strdup(napis); Funkcjonalnie tak, jak dest = src char* strcat(char *dest, const char *src* src) dołą łącza łańcuch src na koniec łańcucha dest char *napis1="sklejony ", *napis2="napis"; strcat(napis1,napis2); //tu w napis1 mamy łańcuch "sklejony napis" 3. Funkcje z modułu u <string.h< int strlen(const char *str* str) wyznacza i zwraca długod ugość (ilość znaków) łańcucha str (bez znaku '\0')' char *napis="d* napis="długi napis do zbadania"; int dl=strlen(napis); int strcmp(const char *str1* str1, const char *str2* str2) porównuje łańcuchy znaków; gdy sąs równe zwraca zero, jeżeli eli str1<str2 zwraca liczbę ujemną, a jeśli str1>str2 zwraca liczbę dodatnią char *napis1="tekst", *napis2="inny"; if (strcmp(napis1,napis2)==0) puts("identyczne"); "); 5
3. Funkcje z modułu u <string.h< char* strlwr(char *str) zamienia w łańcuchu str wielkie litery na małe, nie zmieniając c innych znaków char *napis="d* napis="długi napis Do ZmIaNy"; strlwr(napis); char* strupr(char *str) zamienia w łańcuchu str małe e litery na wielkie, nie zmieniając c innych znaków char *napis="d* napis="długi napis Do ZmIaNy"; strupr(napis); char* strrev(char *str) odwraca kolejność znaków w w łańcuchu str char *napis="napis* do odwrócenia"; strrev(napis); 3. Funkcje z modułu u <string.h< char* strtok(char *napis,, char* separatory) dzieli łańcuch napis na częś ęści według dzielących je separatorów char* element, *sep = ",!?"; char* zdanie = "To jest nasze piękne, długie d zdanie! Podoba się?" element = strtok(zdanie,, sep); do { printf("%s\n", ", element); } while((element=strtok(null,, sep))!= NULL); 6
3. Funkcje z modułu u <string.h< Funkcje do konwersji danych (zmiany typu): float atof(char *napis) konwertuje łańcuch napis na liczbę typu float char* tekst = "3.14159"; float liczba=atof(tekst); float atoi(char *napis) konwertuje łańcuch napis na liczbę typu int char* tekst = "12345"; int liczba=atoi(tekst); 3. Funkcje z modułu u <string.h< Funkcje do konwersji danych (zmiany typu): float itoa(int liczba,, char *napis,* int syst) konwertuje liczbę typu int na łańcuch znaków int liczba=123; char* tekst[20]; itoa (liczba,tekst,10); //10 oznacza system dziesiętny 7
3. Funkcje z modułu 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 kuję za uwagę 8