Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Массивы символов

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

[ Назад | Оглавление | Далее ]









helloworld.ru © 2001-2021
Все права защищены