Мегаобучалка Главная | О нас | Обратная связь


Строки как символьные массивы



2019-08-13 208 Обсуждений (0)
Строки как символьные массивы 0.00 из 5.00 0 оценок




 

В языке Си и ранних версиях языка С++ строки рассматривались как  символьные массивы и вся работа с ними основывалась на использовании этих массивов. Разработанная библиотека функций <string.h> содержит мощные средства для работы со строковыми массивами .

Для описания строки используются обычные средства описания массивов, например: char str [25]; . Индексирование такого массива, как и любого другого , начинается с нуля. Символьные последовательности, разделенные только пробелами, рассматриваются как одна строка, то есть запись:

" В тот год осенняя

погода"

идентична литералу             " В тот год осенняя погода".

Все строковые литералы, в том числе и идентичные, в программе рассматриваются как разные объекты. Адрес первого символа строкового литерала может использоваться по-разному:

¾ если литерал применяется при инициализации массива типа char,    адрес его первого элемента становится синонимом имени массива. Например, идентичными являются следующие описания массива:

char st [] = "Слово";

char st [6] = "Слово";

char st [6] = {'С' 'л' 'о' 'в' 'о' '\0'};

¾ если литерал используется для инициализации указателя типа char*, адрес первого символа литерала будет начальным значением указателя,     например:           

char * pst = "Слово";          ,

здесь описывается переменная - указатель pst , которая получает начальное значение, равное адресу первого элемента строкового литерала (символ С);

¾ если литерал используется в выражении (там, где разрешается применять указатель), то компилятор подставляет в выражение литерала адрес его первого символа, например:

char *pst;

pst = " Первый символ";          ,

здесь pst ¾ получает адрес буквы "П", т.е. при выполнении операции присваивания в ячейку памяти , отведенную для указателя pst  , записывается не массив символов , а только указатель на его начало, т.е. адрес первого символа литерала.

При описании символьного массива, его имя ¾ не переменная, а указатель-константа на начало строки. Поскольку для константы не отводится адрес в памяти, то ее нельзя использовать в некоторых операциях адресной арифметики, например, нельзя осуществлять операцию присваивания вида:

char st [20];

st = " Петров"; // запись неверна, т.к. нельзя изменить значение st

 

Использование элементов массива осуществляется через индексы или через указатели. Для доступа к любому символу строки используется индекс массива char , например, если описана переменная char str [3] , то третим элементом массива можно воспользоваться, записав: str [3]   либо *(str+3)   .

При работе с элементами массивов строк, т.е. двумерным массивам, следует использовать либо индексы массива, либо индексы указателей, например, если описан список фамилий

 

                     char spis [5] [15];   ,

 

то для использования символа массива следует записать:

 

                           spis [i] [j] либо *(spis [i] + j).

Аналогично при объявлении массивов указателей char *str [5]  (указывает на 5 элементов, каждый из которых указывает на строку), а доступ к символу строки можно осуществить, записав *(str [i]+j).

Ввод-вывод символьных массивов

 

Строки можно вводить разными способами, наиболее распространенными из которых являются:

¾ ввод путем инициализации при объявлении строковых массивов:

 

char st [5] = " Стол ";

char st [] = " Стол ";

char * pst = " Стол";

в этом случае двумерные массивы можно инициализировать одним из следующих способов:

 

char str [5] [20] = {"Иванов И.И. ", "Сидоров С.С. ", . . . ,};

char str [ ] [20] = {"Иванов И.И. ", "Сидоров С.С. ", . . . ,};

char *pst [5] = {"Иванов И.И. ", "Сидоров С.С. ", . . . ,};

char *pst [ ] = {"Иванов И.И. ", "Сидоров С.С. ", . . . ,};

¾ ввод с помощью оператора cin >> , если в строке нет пробелов, т.к. символ пробел является разделителем вводимых данных, например:

 

                                char st [5];              cin >> st;

                                char *pst;                cin >> *pst

                                char str [5] [20];    cin >> str [i];

                      char *pst [5];          cin >> ( pst [i] );

¾ посимвольный ввод с помощью функции get( ), например get ( st[i] );

¾ с помощью функции cin.get (str [i], size, endl) ;    ,

где size количество читаемых символов;

¾ ввод с помощью функции cin.getline ( str [i], sizeof ( str [i] ) ); , 

где sizeof( ) - функция определения размера строки.

 

Выводить строковые данные можно используя следующие записи:

 

cout << st;

 printf ( % s,st ); // или ( sprintf )

 puts ( st ); cout . write ( st , size );  и др.

 

Пример 3.3Список строк ( фамилии и инициалы ¾ Ф.И.О.) объявлен как массив указателей. Составить программу ,реализующую ввод массива по строкам и посимвольный вывод этого массива.

 

// P3_3.СРР список строк объявлен как массив указателей

#include <stdio.h>

Void main ()

{

 char *psp[ ] = { "Авдеев А .А .''

                       "Петров П.П."

                        "Лиса Л.Л. "

                        …………… }

char ** ptr = psp;

// Ввод массива по строкам

   while (* ptr);

   puts (* ptr++);

// Вывод этого массива посимвольный

     while (*ptr)

          {

               while (**ptr)

                  { putchar(**ptr); (*ptr)++; }

               ptr++

          }

     }

При использовании заголовочного файла stdio.h можно также применить,например, такие функции:

 

для ввода строк                                             для вывода строк

 

                                                                            puts(st) ; и printf(%s, st);

       gets( st);                                                       cout.width(w);

       scanf (% s,st) ;                                           cout.precision (d);

                                                                                 setw( w);

                                                                                 setprecision( d);



2019-08-13 208 Обсуждений (0)
Строки как символьные массивы 0.00 из 5.00 0 оценок









Обсуждение в статье: Строки как символьные массивы

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (208)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)