Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
71
Добавлен:
26.05.2014
Размер:
5.74 Кб
Скачать

Документация по Cи, C++ и Visual C++   Массивы символов

                                    Стр. 11              < оглавление >      

      Любая символьная константа, например "ОЙ У ПОЛИ КРИНИЧКА", представляет собой массив символов. Во внутреннем представлении компилятор завершает такой массив символом "\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);

}< Назад >          < Дальше >

Соседние файлы в папке Bookc