Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Функции, определеные в заголовочном файле string.h.





 

1. int strlen(char *) - опредляет длинну строки без'\0';

int k = strlen(str1);

 

2. char * strcat(char *, char *) - объединяет две строки в одну;

strcat(str1, str2); //результат в первом массиве.

 

void main (void){

char str1[80]="Мой любимый цветок";

char str2[10]="ромашка";

if (strlen(str1)+strlen(str2)< 80-1)

strcat(str1, str2); //Чтобы копировать - необходимо проверить,

//чтобы длины массива было достаточно на

//две строки + ноль-байт.

}

char * strncat(char *, char *,int) - объединяет 1-ю строку и n-байтов второй строки в одну.

3. int strcmp(char *, char *) - сравнивает строки.

 

# define ANSWER "YES"

void main(void){

char try[10];

gets(try);

puts ("Вы студенты 203 группы?");

while (strcmp(try, ANSWER)!=0){

puts ("Попытайтесь ещё раз")

gets (try);

}

puts("Верно");

}

Функция возвращает 0, если строки одинаковы. Сравнение идёт до признака конца строки - '\0', а не до конца массива, или до первого несравнения:

В-А возвращает 1, А-В возвращает -1.

int strncmp(char *, char *,int) - сравнение n байт у 2-х строк.

 

4.char * strcpy(char *, char *) - копирование строк; эта функция требует 2 указателя строк в качестве аргументов. Второй указатель, ссылыющийся на исходную строку, может быть объявленным указателем, именем массива или строковой константой. Первый указатель, ссылающийся на копию, должен ссылаться на массив или часть массива, имеющего размер, достаточный для размещения строки.

 

#define WORD "Таблица результатов"

void main (void){

char str1[30]; //Длина массива не проверяется

strcpy(str1, WORD)

puts(str1);

}

char * strтcpy(char *, char *,int) - копирование n байт строки

 

5. char *strdup(char *) – выделяет память и копирует строку.

6. char *strupr(char *) – преобразует строчные буквы в прописные.

7. char *strlwr(char *) – преобразует прописные буквы в строчные.

8. char *strrev(char *) – реверсирует строку.

9. char *strchr(char *, int ) – устанавливает позицию первого вхождения символа



10. char *strrchr(char *, int c) – устанавливает позицию последнего вхождения символа с.

11. char *strstr(char *, char *) - устанавливает позицию первого вхождения подстроки str2 в строку str1.

12. int stricmp(char *, char *) – сравнивает не различая строчные и прописные буквы.

Преобразование символьных строк

 

Функции, определеные в заголовочном файле stdlib.h.

 

1. int atoi() - строку в целое.

double atof() - строку в число с плавающей точкой.

void main(void){

char num[10];

int val;

puts("Введите число");

gets(num);

val=atoi(num); // обрабатывает до 1-го символа не являющегося

} // цифрой

 

2. Существуют функции обратного преобразования числа в строку.

char *str itoa(val) - целое в строку.

char *str ftoa(val) - с плавающей точкой в строку.

 

Функции, определеные в заголовочном файле ctype.h.

 

1. Преобразование строчной буквы в прописную - int toupper(int c)

2. Проверка буква прописная или нет - int isupper(int c)

3. Преобразование прописной буквы в строчную - int tolower(int c)

4. Проверка буква строчная или нет - int islower(int c)

#include <ctype.h>

void main(void){

int ch; crit=0; //Признак прописные или строчные буквы

while ((ch=getche())!='\n'){

if(crit==0){

ch=isupper(ch) ? tolower(ch): ch;

putchar(ch);

}

else{

ch=islower(ch)? toupper(ch):ch;

putchar (ch);

}

}

ССЫЛКИ

 

Ссылка – это переменная, псевдоним для другой переменной. Они объявляются при помощи символа &. Если x – переменная, то &x – это адрес переменной x. Ссылки должны быть проинициализированы при объявлении, причем только один раз. Ссылками удобно пользоваться, если работаем с несколькими функциями.

Тип "ссылка на type" определяется следующим образом:

type& имя_перем.

Ссылка при определении сразу же инициализируется. Инициализация ссылки производится следующим образом:

int i = 0;

int& iref = i;

Физически iref представляет собой постоянный указатель на int - переменную типа int* const. Ее значение не может быть изменено после ее инициализации. Ссылка отличается от указателя тем, что используется не как указатель, а как переменная, адресом которой она была инициализирована:

iref++; //то же самое, что i++

int *ip = &iref; //то же самое, что ip = &i;

Таким образом, iref становится синонимом переменной i.

Допустим, есть ячейка памяти с именем x:

 

Определение ссылки: int & px; но ссылка в никуда существовать не может, поэтому пишем int & px = x; то есть у этой же ячейки появилось второе имя: px. Можно работать со ссылкой: px=10; это то же самое, что и x=10;

int y=px; // y=x

Ссылками удобно пользоваться, когда передают параметры в функцию. Происходит передача переменной с её значением и с адресом, то есть передается весь объект.

//пример

void func (int &);//функция принимает переменную по ссылке

void main( )

{

int k=10;

func(k);

printf (“Значение k=%d\n”, k);

}

void func(int &a)//a инициализируется адресом и значением k

{

a+=8;

}

При передаче переменной по ссылке, ссылка инициализируется и адресом и значением этой переменной.

int *d=& a;

Ссылка – это «константный указатель», который не меняет своего значения-адреса.

Ссылка только 1 раз инициализируется адресом и значением переменной и в прцессе работы не может изменить свое значение.

Массив ссылок существовать не может, а массивы указателей существуют.

При передаче больших объектов в функции с помощью ссылки он не копируется в стек и, следовательно, повышается производительность.

 

#include <iostream.h>

void incr (int&);

void main(void){

int i = 5;

incr(i);

cout<< "i= " << i << "\n";

}

void incr (int& k){

k++;

}

 

Поскольку ссылка это псевдоним, то при передаче объекта в функцию по ссылке внутри нее объект можно изменять. Ссылки не могут ссылаться на другие ссылки или на поле битов.

Не может быть массивов ссылок или указателей на ссылку.

Ссылка может использоваться для возврата результата из функции. Возвратить результат по ссылке - значит возвратить не указатель на объект и не его значение, а сам этот объект.

АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ

 

У функции main( ) могут быть свои формальные аргументы. В них возникает необходимость, если нужно передать какие-либо значения в программу из командной строки. Каждый параметр, передаваемый в main – это строка.

int main(int argc, char *argv[]) { }//параметры отделяются друг от друга пробелами

argc – определяет кол-во передаваемых параметров в командной строке, включая имя самой программы (если argc=1, то задано только имя самой программы).

*argv[] – это массив указателей на строки; [ ] – означает пусто.

argv[0] – имя самой программы;

argv[1] – первый параметр и т.д.

Пример: расчет 5 + 10 четыре параметра, т.е. argv[3].

Функция main( ) может возвращать значение, если необходимо. Любая программа должна возвращать в DOS код возврата. При нормальном завершении он равен 0. В командных файлах можно анализировать этот код командой IF ERRORLEVEL 0 echo «Ok!». Если нет необходимости возвращать значение, то оператор return не нужен.

 

#include <iostream.h>

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

if(argc<2) {//проверка были ли переданы параметры в main

puts(“Нет аргументов в строке”);

exit(1);//выход из программы

}

else {

cout<<”Имя выполняемой программы”<<argv[0]<<endl;

cout<<”Аргумент командной строки”<<argv[1]<<endl;

}

return 0;

}

Если программа завершилась с ошибкой, то можно передать код ошибки в DOS функцией exit(1). Код, который возвращает программа, записывается в переменную окружения ERRORLEVEL. В дальнейшем, в любой другой программе или командном файле этот код можно проанализировать.Если программа отработала успешно, то обычно возращается «0».

ПРОИЗВОДНЫЕ ТИПЫ ДАННЫХ

 

Структуры

 

Рассмотрим новый тип данных - структуру. Он не только гибок для представления разнообразных данных, но и позволяет создавать новые типы данных.

Пример использования - создание каталога книг. Каждая книга имеет следующие атрибуты: шифр, название, автора, издательство, год издания, число страниц, тираж, цену. Это несколько массивов. Очень сложно организовать одновременную работу с каталогом, если нужно их упорядочить по названиям, авторам, цене и так далее. Лучше иметь один массив, в котором каждый элемент содержит всю информацию о книге.

Структура – это объект, состоящий из последовательностей поименованных элементов. Каждый элемент имеет свой тип. Структура отличается от массива тем, что её элементы могут иметь различные типы.

 

Для определения нового типа данных нужно его описать:

 

struct book {

char title [81];

char author[30];

float value;

};

book – это имя нового типа данных.

Сруктурный шаблон является основной схемой, описывающей, как образуется новый тип. struct - ключевое слово, имя типа структуры book - необязателен, если сразу определить имя переменной, то его можно не вводить.

struct {

char title [81];

char author[30];

float value;

}libry;

Каждый элемент структуры определяется своим собственным описанием. Это переменные и массивы стандартных типов данных.

Шаблон является схемой без содержания. Он сообщает компилятору, как сделать что-то, но ничего не делает в программе, а вот создание структурной переменной, это и есть смысл слова «структура». Согласно шаблону под эту переменную выделяется память, равная сумме всех элементов (81).

struct book играет ту же роль, что и int, float перед именем переменной.

struct book doyle, panshin;

Для доступа к элементам структурной переменной используется операция точка. Имя переменной, точка, имя элемента структуры.

 

void main(void) {

struct book libry; //описание переменной типа book

puts("Введите название книги");

gets(libry.title);

puts("Введите фамилию автора");

gets(libry.author);

puts("Введите цену книги");

scanf("%f",&libry.value);

printf("%s, %s, %p.2f",libry.title,libry.author,libry.value);

}

 

Структурную переменную можно при определении сразу же инициализировать:

struct book libry={"Руслан и Людмила", "А.С.Пушкин", 1.50};

 

Массивы структур

 

Если переменных типа структура много, то определяется массив структур.

void main(void){

struct book libry[100];

int i;

for(i=0; i<100; i++){

puts("Введите название книги");

gets(libry[i].title);

puts("Введите автора книги");

gets(libry[i], author);

puts("Введите цену книги");

scanf("%f",&libry[i].value);

}}

Индекс применяется к имени массива структур libry[i].

Если libry[2].title[3] – это 4-й элемент в title в 3-й структуре типа book.

 

Вложенные структуры

 

Если одна структура содержится или "вложена" в другую, то говорят, что это вложенные структуры.

 

struct names{ char name[20];

char fio[20];};

struct worker{ struct names people;

char job[20];

float money;};

void main(void){

struct worker driver = {{"Иван", "Иванов"},

"водитель", 1234.1};

Для обращения к элементу вложенной структуры применяется две операции «точка».

puts(driver .people.name);

 

Указатели на структуры

 

Указателями на структуры легче пользоваться, чем самими структурами. Структура не может передаваться в качестве аргумента функции, а указатель на структуру может.

struct worker *pdrv;

pdrv = &driver;

struct worker driver[2]; //массив структур

а) pdrv = driver; // pdrv -> &driver[0];

pdrv+1 -> &driver[1].

Доступ к элементу структуры осуществляется через операцию ->.

pdrv->job -> driver[0].job ->(*prdv).job

б) pdrv->people.name

 

Операции над структурами

 

1) Операция получения элемента.

driver.money=1234;

2) Операция косвенного получения элемента.

pdrv->money=3456;

 









Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2018 zdamsam.ru Размещенные материалы защищены законодательством РФ.