Читайте также:
|
|
Функции для работы со строками, объявленные в 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 | Нарушение авторских прав