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

Здесь есть возможность читать онлайн «Бьярн Страустрап - Справочное руководство по C++» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Справочное руководство по C++: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Справочное руководство по C++»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Справочное руководство по C++ — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Справочное руководство по C++», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

double d = prim();

if (d == 0) return error("divide by 0");

left /= d;

break;

default:

return left;

}

}

int number_value;

char name_string[80];

double prim()

{

switch (curr_tok) {

case NUMBER:

get_token();

return number_value;

case NAME:

if (get_token() == ASSIGN) {

name* n = insert(name_string);

get_token();

n-›value = expr();

return n-›value;

}

return look(name_string)-›value;

case MINUS:

get_token();

return -prim();

case LP:

get_token();

double e = expr();

if (curr_tok != RP) return error(") expected");

get_token();

return e;

case END:

return 1;

default:

return error ("primary expected");

}

}

token_value get_token()

{

char ch = 0;

do {

if (!cin.get(ch)) return curr_tok = END;

} while (ch !='\n' && isspace(ch));

switch (ch) {

case ';':

case '\n':

cin ›› WS;

return curr_tok=PRINT;

case '*':

case '/':

case '+':

case '-':

case '(':

case ')':

case '=':

return curr_tok=ch;

case '0': case '1': case '2': case '3': case '4':

case '5': case '6': case '7': case '8': case '9':

case '.':

cin.putback(ch);

cin ›› number_value;

return curr_tok=NUMBER;

default:

if (isalpha(ch)) {

char* p = name_string;

*p++ = ch;

while (cin.get(ch) && isalnum(ch)) *p++ = ch;

cin.putback(ch);

*p = 0;

return curr_tok=NAME;

}

error ("bad token");

return curr_tok=PRINT;

}

}

int main(int argc, char* argv[])

{

switch (argc) {

case 1:

break;

case 2:

cin = *new istream(strlen(argv[1]),argv[1]);

break;

default:

error("too many arguments");

return 1;

}

// insert predefined names:

insert("pi")-›value = 3.1415926535897932385;

insert("e")-›value = 2.7182818284590452354;

while (1) {

get_token();

if (curr_tok == END) break;

if (curr_tok == PRINT) continue;

cout ‹‹ expr() ‹‹ "\n";

}

return no_of_errors;

}

b3_2_6a.cxx

extern void strcpy(char *,char *);

extern void exit(int);

extern int strlen(char *);

char *save_string(char* p)

{

char* s = new char[strlen(p)+1];

strcpy(s,p);

return s;

}

int main (int argc, char* argv[])

{

if (argc ‹ 2) exit(1);

int size = strlen(argv[1])+1;

char* p = save_string (argv[1]);

delete[size] p;

}

b3_2_6b.cxx

#include ‹stream.hxx›

extern void exit(int);

void out_of_store()

{

cout ‹‹ "operator new failed: out of store\n";

exit(1);

}

typedef void (*PF)();

extern PF set_new_handler(PF);

main()

{

set_new_handler(&out_of_store);

char *p = new char[100000000];

cout ‹‹ "done, p = " ‹‹ long(p) ‹‹ "\n";

}

b4_6_8.cxx

// This version of the program does not assume sizeof(int) == sizeof(char*)!

#include ‹stream.hxx›

#include ‹stdarg.hxx›

extern void exit(int);

void error (int …);

main(int argc, char* argv[])

{

switch (argc) {

case 1:

error(0,argv[0],(char*)0);

break;

case 2:

error(0,argv[0],argv[1],(char*)0);

break;

default:

error(1,"with",dec(argc-1),"arguments",(char*)0);

}

}

void error(int n …)

{

va_list ap;

va_start(ap,n);

for (;;) {

char *p = va_arg(ap,char*);

if (p == 0) break;

cerr ‹‹ p ‹‹ " ";

}

va_end(ap);

cerr ‹‹ "\n";

if (n) exit(n);

}

b4_6_9.cxx

#include ‹stream.hxx›

struct user {

char *name;

char* id;

int dept;

};

typedef user* Puser;

user heads[] = {

"Mcilroy M.D", "doug", 11271,

"Aho A.V.", "ava", 11272,

"Weinberger P.J.", "pjw", 11273,

"Schryer N.L.", "nls", 11274,

"Schryer N.L.", "nls", 11275,

"Kernighan B.W.", "bwk", 11276

};

typedef int (*CFT)(char*,char*);

void sort(char* base, unsigned n, int sz, CFT cmp)

{

for (int i=0; i‹n-1; i++)

for (int j=n-1; i‹j; j--) {

char* pj = base+j*sz;

char *pj1 = pj-sz;

if ((*cmp)(pj,pj1) ‹ 0)

// swap b[j] and b[j-1]

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Справочное руководство по C++»

Представляем Вашему вниманию похожие книги на «Справочное руководство по C++» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Справочное руководство по C++»

Обсуждение, отзывы о книге «Справочное руководство по C++» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x