Строки как символьные массивы
В языке Си и ранних версиях языка С++ строки рассматривались как символьные массивы и вся работа с ними основывалась на использовании этих массивов. Разработанная библиотека функций <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);
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (211)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |