АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Ввод и вывод символьных строк

Читайте также:
  1. Алгоритм проверки адекватности множественной регрессионной модели (сущность этапов проверки, расчетные формулы, формулировка вывода).
  2. Базовый порт ввода/вывода
  3. В-третьих - какие бы не были выводы, их всегда можно и нужно осмыслить.
  4. ВБИ мочевыводящих путей
  5. Введите строку ( до 49 символов )
  6. Ввод и вывод информации
  7. Верен ли такой вывод?
  8. Визначте, чи можна вважати поведінку Антонечка ухиленням від слідства? Чи зупинявся в цьому випадку перебіг давності? Як обчислюються строки давності?
  9. Вопрос Загальна характеристика апеляційного оскарження, строк подання. Вимоги до форми та змісту апеляційної скарги (подання).
  10. вопрос Загальна характеристика касаційного оскарження, строк подання. Вимоги до форми та змісту касаційної скарги (подання).
  11. Вопрос Поняття строку вирішення спору та порядок ведення засідання.

Теоретические сведения

Символьные строки и размещение их в памяти

Символьные строки представляют один из наиболее полезных и важных типов данных языка Си. Символьная строка является массивом типа char, который заканчивается нуль – символом (‘\0’). Компилятор автоматически вставляет его после последнего символа строки. При резервировании памяти под строку программист должен предусмотреть один байт для признака конца строки. Например, строка «СТРОКА» будет иметь представление в памяти, показанное на рис.1.

____________________

 

| С | Т | Р | О | К | А| \ 0 |

____________________

 

Рис.1.

 

Всякий раз, когда компилятор встречается с чем-то, заключенным в двойные кавычки, он определяет это как строковою константу. Символы, заключенные в кавычки, плюс завершающий символ ‘\0’, записываются в последовательные ячейки памяти. Строковые константы размещаются в статической памяти.

При определении массива символьных строк необходимо сообщить компилятору требуемый размер памяти. Один из способов сделать это – инициализировать массив пр помощи строковой константы. Так как автоматические массивы нельзя инициализировать, необходимо для этого использовать статические или внешние массивы.

Например,

Static char stroka [ ] = {‘с’, ‘т’, ‘р’, ‘о’, ‘к’, ‘а’, ‘\0’};

При такой инициализации обязательно нужно включить признак конца строки. Существует другая, более короткая форма записи

Static char stroka [ ] = “строка”;

Есть и третий способ инициализации с помощью указателей. При этом, как и в двух выше описанных случаях, не нужно заранее выделять память для строки. Компилятор по внешнему виду строки определит необходимое количество байтов, в том числе один байт на символ конца строки. Например:

char *str;

str = ” строка”;

Это же самое можно записать так:

char *str = “строка”;

Иной путь выделения памяти заключается в явном ее задании. Во внешнем описании мы могли бы указать;

char m1[13] = “одна_строка”;

В этом случае все неиспользованные элементы автоматически инициализируются нуль–символом, как показано на рис.2.

 

----------------------------------------------

| о | д | н | а | с | т | р | о | к | а | \0 | \0 |

----------------------------------------------

 

Рис.2.

Ввод и вывод символьных строк

В лабораторной работе №1 уже упоминалась функция gets (), считывающая строки. Она получает строку от стандартного устройства ввода, которым является клавиатура. Поскольку строка не имеет заранее заданной длины, функция gets () должна знать, когда ей прекратить работу. Функция читает символы до тех пор, пока ей не встретится символ новой строки (‘\n’), который создается при нажатии клавиши Enter. Функция берет все символы до (но не включая) символа новой строки, присоединяет к ним нуль–символ (‘\0’) и передает строку вызывающей программе. Если все идет хорошо, функция gets () возвращает считанную строку. Если что-то неправильно или встретился символ EOF, то она возвращает символ NULL или нулевой адрес.

Рассмотрим пример считывания и вывода строки.

#include < stdio.h >

#include < string.h > /* Подключение файла string.h для работы со строками*/

main ()

{ char name [ 20 ]; /*Выделение памяти*/

gets (name); /*Размещение введенной информации в строку name*/

printf (“%s”, name); /*Вывод строки*/

}.

В приведенном примере для вывода строки использована функция printf (). Для вывода строк чаще всего используют функцию puts (). Разница между функциями состоит в том, что

printf () не выводит автоматически каждую строку текста с новой строки. Если это потребуется, то нужно соответствующее указание. Так,

printf (“%s\n”, string);

дает то же самое, что и

puts (string);

Первый оператор требует ввода большого числа символов и большего времени при выполнении на компьютере. Рассмотрим пример.

#include < stdio.h >

#include < string.h >

main ()

{ static char str1[ ] = “массив инициализирован”;

char *str2 = “Указатель инициализирован”;

puts (str1);

puts (str2);

puts (&str1[4]);

puts (str2+4);

}.

В результате работы получаем:

массив инициализирован

указатель инициализирован

ив инициализирован

атель инициализирован

Обратите внимание на два последних оператора. Указатель &str1[4] ссылается на пятый элемент массива str1. Этот элемент содержит символ ‘и’, и функция puts () использует его в качестве начальной точки. Аналогично str2+4 ссылается на ячейку памяти, содержащую ‘а’, и с которой начинается вывод строки.

 


1 | 2 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)