Чтение онлайн

ЖАНРЫ

Справочное руководство по C++

Страустрап Бьярн

Шрифт:

‹‹ " = 0" ‹‹ oct(ch)

‹‹ " = 0x" ‹‹ hex(ch) ‹‹ "\n";

 }

}

b2_3_6b.cxx

#include ‹stream.hxx›

char v[2][5] = {

 'a', 'b', 'c', 'd', 'e',

 '0', '1', '2', '3', '4'

};

main {

 for (int i = 0; i‹2; i++) {

for (int j = 0; j ‹5; j++)

cout ‹‹ "v[" ‹‹ i ‹‹ "][" ‹‹ j

‹‹ "]=" ‹‹ chr(v[i][j]) ‹‹ " ";

cout ‹‹ "\n";

 }

}

b2_3_7.cxx

#include ‹stream.hxx›

main

{

 char cv[10];

 int iv[10];

 char* pc = cv;

 int* pi = iv;

 cout ‹‹ "char* " ‹‹ long(pc+1)-long(pc) ‹‹ "\n";

 cout ‹‹ "int* " ‹‹ long(pi+1)-long(pi) ‹‹ "\n";

}

b2_3__10.cxx

#include ‹stream.hxx›

struct pair {

 char* name;

 int val;

};

extern int strlen(char*);

extern int strcpy(char*, char*);

extern int strcmp(char*, char*);

const large = 1024;

static pair vec[large];

pair* find(char* p)

{

 for (int i=0; vec[i].name; i++)

if (strcmp(p,vec[i].name)==0) return &vec[i];

 if (i == large) return &vec[large-1];

 return &vec[i];

}

int& value(char* p)

{

 pair* res = find(p);

 if (res-›name == 0) {

res-›name = new char[strlen(p)+1];

strcpy(res-›name,p);

res-›val = 0;

 }

 return res-›val;

}

const MAX = 256;

main

{

 char buf [MAX];

 while (cin››buf) value(buf)++;

 for (int i=0; vec[i].name; i++)

cout ‹‹ vec[i].name ‹‹ ":" ‹‹ vec[i].val ‹‹ "\n";

}

b3_1all.cxx

#include ‹xstream.hxx›

#include ‹ctype.h›

enum token_value {

 NAME, NUMBER, END,

 PLUS = '+', MINUS = '-', MUL='*', DIV='/',

 PRINT=';', ASSIGN='=', LP='(', RP=')'

};

token_value curr_tok;

struct name {

 char* string;

 name* next;

 double value;

};

const TBLSZ = 23;

name* table[TBLSZ];

int no_of_errors;

double error(char* s) {

 cerr ‹‹ "error: " ‹‹ s ‹‹ "\n";

 no_of_errors++;

 return 1;

}

extern int strlen(const char*);

extern int strcmp(const char*, const char*);

extern char* strcpy(char*, const char*);

name* look(char* p, int ins = 0)

{

 int ii= 0;

 char *pp = p;

 while (*pp) ii = ii‹‹1 ^ *pp++;

 if (ii ‹ 0) ii = -ii;

 ii %= TBLSZ;

 for (name* n=table [ii]; n; n=n-›next)

if (strcmp(p,n-›string) == 0) return n;

 if (ins == 0) error("name not found");

 name* nn = new name;

 nn-›string = new char[strlen(p) + 1];

 strcpy(nn-›string,p);

 nn-›value = 1;

 nn-›next = table[ii];

 table[ii] = nn;

 return nn;

}

inline name* insert(char* s) { return look (s,1); }

token_value get_token;

double term;

double expr

{

 double left = term;

 for (;;)

switch (curr_tok) {

case PLUS:

get_token;

left += term;

break;

case MINUS:

get_token;

left -= term;

break;

default:

return left;

}

}

double prim;

double term

{

 double left = prim;

 for (;;)

switch (curr_tok) {

case MUL:

get_token;

left *= prim;

break;

case DIV:

get_token;

Поделиться с друзьями: