Массивы символов
Любая символьная
константа, например "ОЙ У ПОЛИ КРИНИЧКА",
представляет собой массив символов. Во
внутреннем представлении компилятор завершает
такой массив символом "\0", так что
любая программа может по нему легко обнаружить
конец строки. Поэтому строка занимает в паямяти
на один символ больше, чем записано между
двойными кавычками. Нумерация элементов массива
начинается с нуля. Надо помнить, что, например 'T' -
это символ(буква), а ' T ' - это строка, состоящая из
двух символов: 'T' и '\0'. Отсюда следует, что пустых
строк не бывает.
Строка в языке Си - это
разновидность константы и ее можно присваивать
некоторой переменной, представляющей массив
символов:
char
str[]="ТЕКСТ";
Такая запись и короче и понятнее, чем
общепринятая для начальной инициализации
массивов:
char
str[]={'Т','Е','К','С','Т',};
Если длина строки в
квадратных скобках опущена, то она определяется
автоматически, по количеству присваеваемых
символов. В приведенном выше примере она равна
шести.
Запишем программу (пример 4.1), в которой
функция main формирует строку по указанному выше
правилу и вызывает функцию length, которая
в качестве аргумента получает начальный адрес
этой строки и вычисляет ее длину(без учета
завеершающего символа). Эта функция представляет
собой самостоятельный интерес и будет
использована нами а дальнейшем как библиотечная.
Пример 4.1
/*длина сторки*/
length(s);
char s[];
{
int l=0;
while(s[l]!='\0')
i++;
return(i);
}
#include <stdio.h>
main()
{
static char str[]="ОЙ У ПОЛИ КРИНИЧКА";
printf("%d",length(str));
} |
Программа приведенная ниже
(пример 4.2), выполняет сцепление двух строк.
Собственно, сцепление выполняет функция concat(s,t),
которая присоединят строку t к концу строки
s. Объединяемые строки str1 и str2 объявлены
как внешние, причем размер str1 достаточно большой,
чтобы сохранить новую строку. Используя
спецификацию формата %s, функция printf
выводит всю строку сразу, причем она
"знает", что печать остановить при
достижении завершающего символа "\0".
Пример 4.2
/*сцепление строк*/
concat(s,t)
char s[],t[];
{
int i,j;
i=j=0;
/*поиск конца строки*/
while(s[i]!='\0')i++;
while((s[i++]=t[j++])!='\0');
/*копия t*/
#include <stdio.h>
char str1[45]="ОЙ ТАМ У ПОЛИ КРИНИЧКА";
char str2[]="ТАМ ХОРОША ВОДИЧКА";
main()
{
concat(str1,str2);
printf("%s",str);
}
|
На
пример 4.3 приведена программа с функцией revers(s),
переставляющей символы строки s в
обратном порядке. В качестве библиотечной
исползуется ранее рассматривавшаяся функция length.
Функция revers меняет местами символы
строки, симетричные относительно ее середины;
если в строке нечетное число символов, то средний
символ остается на месте.
Пример
4.3
/*вращение строки*/
#include stdio.h
#include "length.c"
revers(s)
char s[];
{
int l,i=0;
l=length(s);
while(i_=l/2)
{
c=s[i]; s[i]=s[l-i-1];
s[l-i-1]=c;
i++;
}
}
main()
{
static char str[]= "ОЙ У ПОЛИ КРИНИЧКА";
revers(str);
printf("%s\n",str);
} |
< Дальше >
|