Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Strcpy(), strcat(), strlen(), strcmp()




Вызов функции strcpy() имеет вид strcpy(s1,s2). Содержимое строки s2 копируется встроку s1.

Вызов функции strcat() имеет вид strcat(s1,s2). Функция strcat() присоединяет строку s2 к строке s1 и помещает ее в массив, где находится строка s1, при этом строка s2 не изменяется. Нулевой байт, который завершал строку s1, будет заменен первым символом строки s2.

Пример использования данных функций

#include <stdio.h>

#include <string.h>

Void main(void)

{

char s1[20],s2[20];

strcpy(s1,”Hello, “);

strcpy(s2,”World!”);

Puts(s1);

Puts(s2);

Strcat(s1,s2);

Puts(s1);

Puts(s2);

}

Вызов функции strcmp() имеет вид strcmp(s1,s2). Функция strcmp() сравнивает строки s1 и s2 и возвращает значение 0, если строки равны, то есть содержат одно и то же число одинаковых символов. Сравнение в лексикографическом смысле. Если s1 лексикографически (в смысле словаря) больше s2, то функция возвращает положительное значение, если меньше, то отрицательное значение.

Вызов функции strlen() имеет вид strlen(s). Функция возвращает длину строки s, при этом завершающий нулевой байт не учитывается.

Пример

#include <stdio.h>

#include <string.h>

Void main(void)

{

char s[80];

printf(”Введите строку: “);

Gets(s);

printf(“Строка \n %s \n имеет длину %d символов \n”,s,strlen(s));

}

Функции из стандартной библиотеки для работы со строками

  1. char *strcat(char *dest, char *source) – конкатенация строк dest и source.
  2. char *strncat(char *dest, char *source, unsigned maxlen) – присоединяет maxlen символов строки source к строке dest.
  3. char *strchr(char *source, char ch) – поиск в строке source первого вхождения символа ch.
  4. int strcmp(char *s1, char *s2) – возвращает 0, если s1 = = s2, возвращает <0, если s1<s2, и возвращает >0, если s1>s2.
  5. int strncmp(char *s1, char *s2, int maxlen) – возвращает 0, если s1 = = s2, возвращает <0, если s1<s2, и возвращает >0, если s1>s2. Сравниваются только первые maxlen символов.
  6. int stricmp(char *s1, char *s2) – возвращает 0, если s1 = = s2, возвращает <0, если s1<s2, и возвращает >0, если s1>s2. Не проверяются регистры букв.
  7. int strnicmp(char *s1, char *s2, int maxlen) – возвращает 0, если s1 = = s2, возвращает <0, если s1<s2, и возвращает >0, если s1>s2. Сравниваются только первые maxlen символов. Не проверяются регистры букв.
  8. char *strcpy(char *dest, char *source) – копирование строки source в строку dest.
  9. char *strncpy(char *dest, char *source, unsigned maxlen) – копирование maxlen символов строки source в строку dest.
  10. int strlen(char *s) – выдает число символов в строке без учета нулевого символа конца строки.
  11. char *strlwr(char *s) – переводит всю строку в нижний регистр (в строчные буквы)
  12. char *strupr(char *s) – переводит всю строку в верхний регистр (в прописные буквы)
  13. char *strdum(char *s) – вызывает функцию malloc и отводит место под копию s.
  14. char *strset(char *s, char ch) – заполняет всю строку символами ch.
  15. char *strnset(char *s, char ch, unsigned n) – заполняет первые n позиций строки s символами ch.
  16. char *strrev(char *s) – инвертирует все буквы в строке s.
  17. int strcspn(char *s1, char *s2) – возвращает длину начального сегмента строки s1, которая состоит исключительно из символов, не содержащихся в строке s2.
  18. char *strpbrk(char *s1, char *s2) – просмотр строки s1 до тех пор, пока в ней не встретится символ, содержащийся в s2
  19. char *strrchr(char *s, char ch) – просматривает строку s до последнего появления в ней символа ch.
  20. int strspn(char *s1, char *s2) – возвращает длину начального сегмента строки s1, который состоит исключительно из символов из строки s2
  21. char *strstr(char *s1, char *s2) – возвращает указатель на позицию вхождения строки s2 в строку s1. Если вхождения нет, то значение указателя NULL.
  22. char *strtok(char *s1, char *s2) – предполагается что строка s1 состоит из фрагментов, разделенных одно- или многосимвольными разделителями из строки s2. При первом обращении к strtok выдается указатель на первый символ первого фрагмента строки s1. последующие вызовы с заданием нуля вместо первого аргумента будут выдавать адреса дальнейших фрагментов из строки s1 до тех пор, пока фрагментов не останется.

 

Двумерные массивы

Язык С допускает многомерные массивы, простейшей формой которых является двумерный массив

(two-dimensional array). Двумерный массив a[3][4] можно представить в виде таблицы

A[0][0] A[0][1] A[0][2] A[0][3]
A[1][0] A[1][1] A[1][2] A[1][3]
A[2][0] A[2][1] A[2][2] A[2][3]

Количество байт = <размер типа данных>*<количество строк>*<количество столбцов>

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

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

#include <stdio.h>

#include <string.h>

Void main(void)

{

char text[5][20];

strcpy(text[0],”Turbo Basic”);

strcpy(text[1],”Turbo Pascal”);

strcpy(text[2],”Borland C++”);

strcpy(text[3],”Turbo Prolog”);

strcpy(text[4],”Visual C++”);

}

T u r b o   B a s i c \0                
T u r b o   P a s c a l \0              
B o r l a n d   C + + \0                
T u r b o   P r o l o g \0              
V i s u a l   C + + \0                  

 

Инициализация массивов

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

float farr[6]={1.1,2.2,3.4,4.0.-5.5};

int a[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

Инициализации

int a[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; и int a[3][5]={1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15};

эквивалентны.

Количество инициализаторов не обязательно совпадает с количеством элементов массива. Например, различные инициализации одного и того же массива.

int a[3][5]={1,2,3,4,5,6,7,8,9,10,11}; и int a[3][5]={1,2,3},{4,5,6,7,8},{9,10,11};

Соответствующие массивы будут заполнены следующим образом

В первом случае

         
         
         

Во втором случае

         
         
         

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

char str[15]={‘B’,’o’,’r’,’l’,’a’,’n’,’d’,’ ‘,’C’,’+’,’+’}; или char str[15]=”Borland C++”;

Допускается объявление и инициализация массива без явного указания размера массива.

Примеры:

char str[]=”Это объявление и инициализация массива символов”;

int mass[]={1,2,3,4,5,6};

int arr[][3]={1, 2, 3,

5, 6, 7,

8, 9, 0};

Пример сортировки элементов массива

#include <stdio.h>

Void main(void)

{

int arr[10]={1, 23, 4, 7, 8, 0, 1, 9, 4, 7};

Int i,j,tmp;

printf(“Неотсортированный массив:”);

for(i=0;i<10;i++)

printf(“%d “,arr[i]);

printf(“\n”);

for(i=0;i<9;i++)

{

for(j=i+1;j<10;j++)

{

if (a[i]>a[j])

{

tmp=a[i];

a[i]=a[j];

a[j]=tmp;

}

}

}

printf(“Oтсортированный массив:”);

for(i=0;i<10;i++)

printf(“%d “,arr[i]);

printf(“\n”);

}

Указатели

Важная конструкция в С, С++ - это указатели. Они необходимы для успешного использования функций и динамического распределения памяти. Кроме того многие конструкции языка С, С++, Visual C++ требуют применения указателей.

Объявление указателей.

Указатель – это переменная, которая содержит адрес некоторого объекта (адрес памяти, целое число). Указатель объявляется следующим образом:

тип *<имя переменной>;

В этом объявлении тип – некоторый тип языка С, определяющий тип объекта, на который указывает указатель (адрес которого содержит). Символ * означает, что следующая за ним переменная является указателем. Пример:

char *ch;

int *temp,i,j;

float *pf,f;

Операции над указателями

С указателями связаны две специальные операции & и *. Обе операции являются унарными (один операнд) и обладают наивысшим приоритетом.

Операция & соответствует операции “взять адрес”.

Операция * соответствует операции “взять значение по указанному адресу ”.

Простейшие действия с указателями иллюстрируются следующей программой:

#include <stdio.h>

Void main(void)

{

float x=10.1,y;

float *pf;

pf=&x;

y=*pf;

printf(“x=%f y=%f”, x,y);

*pf++;

printf(“x=%f y=%f”, x,y);

y=1+*pf*y;

printf(“x=%f y=%f”, x,y);

}

К указателям можно применить операцию присваивания. Указатели одного и того же типа могут использоваться в операциях присваивания, как и любые другие переменные. Рассмотрим пример:

#include <stdio.h>

Void main(void)

{

int x=10;

int *p, *g;

p=&x;

g=p;

printf(“%p”,p); /* печать содержимого p */

printf(“%p”,g); /* печать содержимого g */

printf(“%d %d”,x, g); /* печать величины х и величины по адресу g */

}

В С допустимо присвоить указателю любой адрес памяти. Однако, если объявлен указатель на целое int *pi, а по адресу, который присвоен данному указателю, находится переменная типа float, то при компиляции программы будет выдано сообщение об ошибке в строке p=&x; Эту ошибку можно исправить, преобразовав указатель на int к указателю на float явным преобразованием типа: p=(int*)&x; Но при этом теряется информация о том, на какой тип указывает исходный указатель.Как и над другими типами переменных, над указателями можно производить арифметические операции: сложение и вычитание (операции ++ и – являются частными случаями операций сложения и вычитания). Пример:

#include <stdio.h>

Void main(void)

{

int *p;

Int x;

p=&x;

printf(“%p %p”, p, ++p);

}

После выполнения этой программы при выполнении операции ++p значение указателя увеличивается на 2 (указание на адрес следующего целого, т. е. учитывается базовый тип указателя). Операции над указателями не ограничиваются только операциями ++ и --. К указателям можно прибавлять и из них можно вычитать целые числа. Общая формула для вычисления значения указателя после выполнения операции p=p+n; будет иметь вид <p>=<p>+n*<количество байт памяти базового указателя типа>

Указатели можно сравнивать. Применимы все 6 операций: <,>,<=,>=,==,!=.





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


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 3970 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Ваше время ограничено, не тратьте его, живя чужой жизнью © Стив Джобс
==> читать все изречения...

2264 - | 2207 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.