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

Строковые функции (string.h). Работа с функциями манипуляции памятью. Нахождение символа в строке. Сравнение символов в строках. Заполнение буфера при помощи memset().

Читайте также:
  1. D триггеры, работающие по фронту.
  2. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  3. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  4. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  5. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  6. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ
  7. I. ВНЕАУДИТОРНАЯ САМОСТОЯТЕЛЬНАЯ РАБОТА СТУДЕНТОВ

Функции для работы со строками, объявленные в string.h, как правило, принимают указатели в качестве параметров и возвращают указатель или целое число. Вы сможете найти описание всех этих функций в следующем разделе или, более подробно, в справочнике Visual C++ Run-Time Library Reference (стандартная библиотека Visual C++). В дополнение к этому, в string.h объявлены также функции манипуляции с областями памяти, например, memccpy() и memset(). Функции, перечисленные в таблице, употребляются наиболее часто. Функции для работы со строками и буферами памяти дают программисту гибкие и мощные инструменты для решения различных задач.

6.1.1. Работа с функциями манипуляции памятью

Функции для работы с памятью, упомянутые в предыдущем разделе, объявляются следующим образом:

 

void *memccpy(void *dest,void *source,int ch,unsigned count)

void *memchr(void *buf,int ch,unsigned count)

int memcmp(void *bufl,void *buf2,unsigned count)

void *memcpy(void *dest,void * source,unsigned count)

int memicrnp (void *bufl,void *buf 2, unsigned count)

void *meimiove (void *dest,void * source, unsigned count)

void *memset(void *dest,int ch,unsigned count)

 

Здесь *buf, *buf1, *buf2, *dest и *source — указатели на соответствующие буферы памяти, целое ch содержит код символа. Параметр count указывает функции, сколько символов следует обработать.

 

6.1.1.1. Нахождение символа в строке

В этом примере мы при помощи функции memchr() сканируем буфер в поисках строчной буквы "f".

 

//19MEMCHR.C

//Пример использования функции memchr.

//Поиск символа в буфере.

#include <string.h>

#include <stdio.h>

char buf[35];

char *ptr;

main()

{

strcpy(buf,"This is a fine day for a search.");

/* Сегодня удачный день для поисков */

ptr=(char *)memchr(buf,'f',35);

if (ptr!= NULL)

/* символ находится в позиции %d */

printf("character found at location: %d\n",ptr-buf+1);

else

/* символ не найден */

printf("character not found.\n");

return (0);

}

 

В данном примере, если строчная "f "есть в строке, функция memchr() сообщит: "character found at location: 11".

 

6.1.1.2. Сравнение символов в строках

Следующий пример посвящен функции memicmp(). Эта функция сравнивает строки, содержащиеся в буферах buf1 и buf2. Эта функция не учитывает регистр символов.

 

//19MEMCMP.C

//Пример использования функции memicmp.

//Сравнение двух строк

#include <string.h>

#include <stdio.h>

char buf1[40],buf2[40];

main()

{

strcpy(buf1,"Well, are they identical or not?");

strcpy(buf2,"Well, are they identicle or not?");

//0-строки идентичны с точностью до регистра

//х-(ненулевой результат)-строки различаются

printf("%d\n",memicmp(buf1,buf2,40));

return (0);

}

 

Если бы не то обстоятельство, что слово 'identical' во второй строке написано неправильно, обе строки были бы одинаковыми. В этом примере memicmp() возвращает ненулевое значение, а именно -1.

 

6.1.1.3. Заполнение буфера при помощи memset()

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

 

//19MEMSET.C

//Пример использования функции memset

//заполнение буфера

#include <string.h>

#include <stdio.h>

char buf[20];

main()

{

buf[15]='\0';

printf("the contents af buf: %s",memset(buf,'+',15));

return (0);

}

 

В этом примере в строку записывается пятнадцать символов + и завершающий нулевой символ. Программа выдаст на экран пятнадцать знаков +.

 

Работа со строковыми функциями. Сравнение содержимого двух строк. Поиск в строке одного из нескольких символов. Первое вхождение одного символа в строке. Определение длины строки. Нахождение одной строки внутри другой. Приведение символов к верхнему регистру.

прототипы некоторых функций для манипуляции строками, содержащиеся в string.h:

 

irrt strcmp(const char *s1,const char *s2) Сравнение 2 строк
char *strcpy(char *s1,const char *s2) Копирование строки
char *_strerror(char *s) Пользовательское сообщение об ошибке
size_t strten(const char *s) Вычисление длины строки
char *strncat(char *s1,const char *s2,size_t n) Добавление n символов s2 в конец s1
int strncmp(const char *s1,const char *s2, size_t n) Сравнение строк по первым n символам

6.1.1.1. Сравнение содержимого двух строк

Следующая программа применяет функцию strcmp() и сообщает результат сравнения.

//19STRCMP.C

//Пример использования функции memset

//сравнение двух строк

#include <string.h>

#include <stdio.h>

char s1[45]="A group af characters makes a god string.";

char s2[45]="A group af characters makes a god string?";

int answer;

main()

{

answer=strcmp(s1,s2);

if(answer>0) printf("s1 is greater then s2");

else if(answer==0) printf("s1 is equal to s2");

else printf("s1 is less then s2");

printf("\n");

return (0);

}

6.1.1.1. Поиск в строке одного из нескольких символов

В следующем примере мы ищем в строке первое вхождение одного из заданных символов:

#include <string.h>

#include <stdio.h>

char s1[5];

int answer;

main()

{ strcpy(s1,"We are looking for great strings.");

answer=strcspn(s1,"abc");

printf("The first a,b,c appeared at psitin %d\n",answer+1);

return (0);}

 

6.1.1.1. Первое вхождение одного символа в строке

В следующем примере производится поиск первого пробела в строке.

 

#include <string.h>

#include <stdio.h>

char s1[20]="What is a friend?";

char *answer;

main()

{

answer=strchr(s1,' ');

printf("After the first blank: %s\n",answer);

return (0);

}

6.1.1.1. Определение длины строки

Функция strlen() находит длину заданной строки. Вот простой пример:

#include <string.h>

#include <stdio.h>

char *s1="The string length is measured in characters!";

main()

{

printf("The string length is %d\n",strlen(s1));

return (0);

}

Здесь strlen() определяет общее количество символов в строке. В данном примере это количество равно 40.

6.1.1.2. Нахождение одной строки внутри другой

Функция strstr() находит в строке группу (строку) символов, как показано в этом примере:

#include <string.h>

#include <stdio.h>

main()

{

char *s1="There is always something you miss.";

char *s2="way";

printf("%s\n",strstr(s1,s2));

return (0);

}

Здесь часть исходной строки, начиная с первого вхождения "way", передается функции printf(). На экран будет выдано "ways something you miss".

 

6.1.1.3. Приведение символов к верхнему регистру

В языке, где различаются прописные и строчные буквы, может пригодиться функция для преобразования строки в другой регистр. Функция strupr() приводит символы нижнего регистра к верхнему.

 


Дата добавления: 2015-12-08; просмотров: 122 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.014 сек.)