Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SIT.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
349.18 Кб
Скачать

Массивы символов. Строки

Массивы типа char - символьные массивы - занимают в языке особое место. Во многих языках есть специальный тип данных - строка символов (string). В языке С отдельного типа строки символов нет, а реализована работа со строками путем использования одномерных массивов типа char. В языке С символьная строка - это одномерный массив типа char, заканчивающийся нулевым байтом. Нулевой байт - это байт. каждый бит которого равен нулю. Для нулевого байта определена специальная символьная константа '\0'. Это следует учитывать при описании соответствующего массива символов. Так, если строка должна содержать N символов, то в описании массива следует указать N+1 элемент. Например, описание char str[11]; предполагает, что строка содержит 10 символов, а последний байт зарезервирован под пулевой байт. Задан обычный одномерный массив, но если трактовать его как строку символов, то это будет строка максимум из 10 элементов.

Хотя в языке С нет специального типа строки, язык допускает строковые константы. Строковая константа - это список литер, заключенных в двойные кавычки. Например, "Borland C++", "Это строковая константа".

В конец строковой константы не надо ставить символ '\0'. Это сделает компилятор, и строка "Borland C++" в памяти будет выглядеть так:

|В|о|г|l|a|n|d||С|+|+|\0|

Есть два простых способа ввести строку с клавиатуры. Первый способ -воспользоваться функцией scanf() со спецификатором ввода %s. Надо помнить, что функция scanf() вводит символы до первого пробельного символа. Второй способ - воспользоваться специальной библиотечной функцией gets(), объявленной в файле stdio.h. Функция gets() позволяет вводить строки, содержащие пробелы. Ввод оканчивается нажатием клавиши Enter. Обе функции автоматически ставят в конце строки нулевой байт. Не забудьте зарезервировать для него место. В качестве параметра в этих функциях используется просто имя массива.

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

Программа 3.2:

#include <stdio.h>

/* Ввод строки с клавиатуры */

void main() {

char str[80]; /* Зарезервировали место для строки */

printf( "ведите строку длиной менее 80 символов: ");

gets(str); /* читает строку, пока не нажмете клавишу Enter */

puts(str);

printf("Введите еще одну строку длиной менее 80 символов: ");

scanf("%s",&str); /* читает строку, пока не встретится пробел */

puts(str); }

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

Для работы со строками существует специальная библиотека, описание которой находится в файле string.h, то есть в начале программы нужно написать #include <string.h>.

Наиболее часто при работе со строками используются функции strcpy(), strcat(), strlen(), slrcmp() этой библиотеки. Рассмотрим их более подробно.

Синтаксис использования функции strcpy() следующий:

char *strcpy(char *dest, const char *src);

При этом происходит копирование одной строки (src) в другую (dest). Функция strcpy возвращает значение dest. Например:

strcpy(sl. s2);

Функция strcpy() используется для копирования содержимого строки s2 в строку sl. Массив sl должен быть достаточно большим, чтобы в него поместилась строка s2. Если мало, компилятор не выдает указания на ошибку или предупреждения. Это не прервет выполнения программы, но может привести к порче других данных или самой программы и неправильной работе программы в дальнейшем.

Синтаксис использования функции strcat() имеет вид

char *strcaе(char *sl, const char *s2);

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

Программа 3.3:

#include<string. h>

#include<stdio.h.>

int main(void) {

char destination[25];

char *blank=" ", *c = "C++", *Borland = "Borland";

strcpy(destination, Borland);

gtrcat(destination, blank);

strcat(destination, c);

printf("%s\n", destination);

return 0; }

Синтаксис использования функции strcmp() имеет вид

int strcmp(const char *sl, const char *s2);

Функция strcmp сравнивает строки sl и s2 и возвращает значение 0, если строки равны, то есть содержат одно и то же число одинаковых символов. Под сравнением строк понимается сравнение в лексикографическом смысле, так, как это происходит, например, в словаре. Конечно, в функции происходит посимвольное сравнение кодов символов. Код первого символа одной строки сравнивается с кодом второй строки. Если они равны, рассматриваются вторые символы, и т. д. Если sl лексикографически (в смысле словаря) больше s2, то функция slrcmp() возвращает положительное число, если меньше - отрицательное значение.

Программа 3.4:

#include<string.h>

#include<stdio.h>

int main(void){

char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";

inl ptr:

pir =slrcmp(buf2. huf1);

if(рtr>0)

printf("buffer 2 is greater than buffer 1\n");

else

printf(“buffer 2 is less than buffer l\n");

ptr=strcmp(buf2, buf3);

if (ptr>0)

printf("buffer 2 is greater than buffer 3\n");

else

printf(“buffer 2 is less than buffer 3\n");

return 0:}

Вызов функции strlen() имеет вид

int l= strlen(s);

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

Синтаксис использования функции strchr() имеет вид

char *strchr( char *s, int с);

Функция strchr просматривает строку s, осуществляя поиск указанного символа с. Функция strchr находит первое вхождение символа с в строке s и возвращает указатель на место найденного символа в строке.

Программа 3.5:

#include<string.h>

#include<stdio.h>

int main(void)

{char string[15];

char *ptr, с='г';

strcpy(siring, "This is a string");

pir strchr(slring, c);

if(ptr)

printf("Символ %с находится в позиции: %d\n", с, ptr-string);

else

printf("Указанный символ не найден\n");

return 0; }

Существует еще ряд функций для работы со строками, которые здесь не рассмотрены. Рассмотрим примеры работы с символами и строками.

Программа 3.6:

#include<string.h>

#include<stdio.h>

#include<ctype.h>

#include<iostream.h>

void main() {

char st[25];

gets(st);

puts(st);

for(int i=0; i<=strlen(st); i++) {

if(isalpha(st[i])) cout<<”bukva "<<st[i]<<"\n";

if(isdigit(st[i])) cout<<"number "<<st[i]<<"\n";

}

Программа 3.7:

#include<stdlib.h>

#include<string.h>

#include<dos.h>

#included<stdio.h>

void main() {

struct dostime_t t;

char s[80]; '

char now_timc[3][10];

printf("Input string: ");

gets(s);

printf(“This string \n %s \n has length equal %d characters \n", s, strlen(s));

_dos_gettimc(&t);

gcvt((double)t.hour, 4, now_time[0]);

gcvt((double)t.minute, 4, now_time[1]);

gcvt((double)t.second, 4, now_time[2]);

printf("%s",now_time[0]);

printf(": %s",now_time[1]|);

printf(": %s",now_time[2]);

}

В этой пpoграмме используются:

  1. переменная t типа struct dostime_t. Это структурированная переменная с полями hour, minute и second;

  2. функция _dos_gettime(&t), которая и “добывает” системное время;

  3. функция gcvt, преобразующая соответственно часы, минуты, секунды в привычную для нашего восприятия форму.

Следующие примеры иллюстрируют работу функций toupper и tolower из заголовочного файла ctype.h.

Программа 3.8:

#include<stdio.h>

#include<ctype.h>

main()

{ char str[]="String From Leiteis in Different Registers";

/* Cтрока Состоящая из Букв в Разных Регистрах; */

int i=1;

printf("Строка Будет Напечатана Заглавными Буквами");

while (str[i])

printf("%c", toupper(str [i++]));

return 1; }

Программа 3.9:

#include<stdio.h>

#include<ctype.h>

main()

{char str[]="String From Letters in Different Registers";

/*Cтpoкa Состоящая из Букв в Разных Регистрах":*/

printf(("Строка будет напечатана строчными буквами");

while(str[i]) printf("%c", tolower(str [ i++]));

return 1; }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]