ANSI C 1

ANSI C 1



6 STRUKTURY

/* getword: weź następne słowo lub znak z wejścia */ int getword(char *word, int lim)

{

int c, getch(void); void ungetch(int); char *w = word;

while (isspace(c = getch()))

i

if (c != EOF)

*w-h- = c; if (! isalpha(c)) {

*w = ’\0’; return c;

}

for (; —lim > 0; w++)

if (! isalnum(*w = getch())) { ungetch(*w); break;

}

*w = ’\0’; return word[0];

Funkcja getword korzysta z funkcji getch i ungetch, które napisaliśmy w rozdz. 4. Kompletując znaki alfanumeryczne, getword czyta o jeden znak za dużo. Wywołanie funkcji ungetch oddaje ten znak z powrotem na wejście, umożliwiając wczytanie go przy ponownym wywołaniu. Funkcja getword korzysta z następujących makr zdefiniowanych w standardowym nagłówku <ctype.h>: isspace do pomijania białych znaków, isalpha do rozstrzygnięcia, czy dany znak jest literą, oraz isalnum do zidentyfikowania liter i cyfr.

A

Ćwiczenie 6.1. Nasza wersja funkcji getword nie obsługuje poprawnie znaków podkreślenia, stałych napisowych, komentarzy oraz instrukcji preprocesora. Napisz lepszą wersję tej funkcji.    -


Wskaźniki do struktur

Aby zilustrować niektóre z rozważań związanych ze wskaźnikami do struktur i tablicami struktur, napiszemy jeszcze raz program zliczający słowa kluczowe języka C tym razem używając wskaźników zamiast indeksów tablic.

6.4 WSKAŹNIKI DO STRUKTUR


Zewnętrznej deklaracji tablicy keytab nie trzeba zmieniać, modyfikacji tomiast funkcje main i binsearch.

#include <stdio.h>

#include <ctype.h>

#include <string.h>

#define MAXWORD 100

int getword(char *, int);

struct key *binsearch(char *, struct key *, int);

I* zlicz słowa kluczowe C; wersja wskaźnikowa */ main()

{

char word[MAXWORD]; struct key *p;

while (getword(word, MAXWORD) != EOF) if (isalpha(word[0]))

if ((p = binsearch(word, keytab, NKEYS)) != NULL) p->count++;

for (p = keytab; p < keytab + NKEYS; p-H-) if (p->count > 0)

printf(”%4d %s”, p->count, p->word); return 0;

I* binsearch: szukaj słowa w tab[0]...tab[n-1] */ struct key *binsearch(char *word, struct key *tab, int n)

{

int cond;

struct key *low = &tab[0]; struct key *high = &tab[n]; struct key *mid;

while (Iow < high) {

mid = Iow + (high-low) / 2; if ((cond = strcmp(word, mid->word)) < 0) high = mid; else if (cond > 0)

Iow = mid + 1; else

return mid;

}

return NULL;

}


185


Wyszukiwarka

Podobne podstrony:
P1050183 fyj__Tekst spójny, wiafciwołcl struktury głębokiej_ 23 niętej postaci R(J> lub R(at), a
ANSI C 1 4 FUNKCJE I STRUKTURA PROGRAMU wykonywalnego pliku zwanego a.out. Jeśli wystąpi błąd, np.
ANSI C 1 4 FUNKCJE I STRUKTURA PROGRAMU I* qsort: uporządkuj v[left]...v[right] rosnąco */ void qs
ANSI C 0 6 STRUKTURY int getword(char *t int); int binsearch(char *, struct key *, int); /* zlicz
ANSI C 3 6 STRUKTURY Żaden węzeł nie może mieć więcej niż dwóch potomków; może natomiast mieć jedn
ANSI C 4 6 STRUKTURY Funkcja addtree jest rekurencyjna. Funkcja main wprowadza wczytane słowo na n
ANSI C 8 6 STRUKTURY _____________ wyboru odpowiednich spośród typów short, int lub long dla każde
IMG 3@ Określ punkt początkowy: Aktualna szerokość linii: 0.0000 Określ następny punkt lub
page0107 97 utrata woli—będące następstwem zniesionego lub nadwerężonego świadomego duchowego życia&
page0129 119 namysł, a za nim dopiero następuje czyn lub powstrzymanie się od niego. Wprawdzie mater
50193 IMG63 (2) Wskaźnik podobieństwa struktur jest określony następującym
IMGh18 aberracje (czyli zaburzenia) chromosomowe Strukturalne - w których komórki zawierają jeden lu
moda kobieca XXw str288 następnie pionowo lub rozchodzące się dołem ukośnie*. Szycie płaszczy z różn
11 Struktura pamięci mikrokontrolera 21 Struktura pamięci mikrokontrolera 21 MOV_Blok_XRAM_Dec: MOV
Do metali ciężkich zalicza się następujące metale lub ich jony chrom (Cr), kobalt (Co), nikiel (Ni),
HPIM7436 2. Ocena zębów i struktur podtrzymujących: *    ilość zębów - braki lub zęby

więcej podobnych podstron