Ввод-вывод с помощью форматного ввода/вывода (средствами языка Си)



Введение

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

Реферат – вариант № 3: строки

Одномерный массив наиболее часто применяется в виде строки символов. Строка- это одномерный массив символов , заканчивающийся нулевым символом. В языке С признаком окончания строки (нулевым символом) служит символ '\0'. Таким образом, строка содержит символы, составляющие строку, а также нулевой символ. Это единственный вид строки, определенный в С.

Строки

Определение строк

Для представления текстовой информации используют символ:

1) cимвольные константы – 1 или 2 символа , заключенные в апостроф

‘a’ ‘c’ - обычные

‘/n’ – управляющие

2) строковые константы – последовательность символов, заключенные в кавычки

3) символьная переменная

Char a,b,c;

a = '\0'

c= '\n'

scanf («%с», &b);

4) символьные массивы

Char c[100];

for (i=0; i<100; i++)

c[i]= i+48;

printf («%с», с[i]);

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

5) Cтроки

Char c[100], a[100] = «Hellow»;

Printf («%s»,с); // все подряд

Printf («%s»,a); // только Hellow

Любой пробел (разрыв) говорит о том, что он означает окончание строки.

 

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

Для изображения отдельных знаков, имеющих индивидуальные внутренние коды, используются символьные константы. Каждая символьная константа - это лексема, которая состоит из изображения символа, заключенного в апострофы. Например: 'А', 'а', '8', '0', '+', '.' и т.д.

Внутри апострофов можно записать любой символ, изображаемый на дисплее или принтере в графическом режиме. Однако используются и коды, не имеющие графического представления. Примерами таких кодов служит код перехода курсора на новую строку или код возврата каретки. Для изображения таких символьных констант используются комбинации из нескольких символов, имеющих графическое представление. Каждая такая комбинация начинается с символа '\' и называется управляющей последовательностью (см. табл.).

Символ Название Описание
'\n' Перевод строки Переводит курсор на новую строку
'\t' Горизонтальная табуляция  
'\r' Возврат каретки Переводит курсор на начало строки
'\\' Обратная косая черта \ Печатает обратную косую черту
'\'' Апостроф Печатает апостроф
'\";' Кавычка Печатает кавычки
'\0' Ноль-символ Обозначает конец строки
'\a' Сигнал-звонок  
'\b' Возврат на одну позицию Затирает предыдущий символ
'\f' Перевод страницы  
'\v' Вертикальная табуляция  
'\?' Знак вопроса Печатает знак вопроса
   

 

Для хранения одного ASCII-символа требуется один байт памяти. Например, символ 'A' занимает 1 байт, а строка ";A"; - 2 байта, т.к. в конце строки добавлен нулевой байт '\0'. Символы строки располагаются в памяти ЭВМ в соседних ячейках, поэтому для работы со строками достаточно знать адрес ее первого символа (окончание строки определяется по положению ноль-символа).

Инициализацию строк можно проводить точно так же, как и обычных массивов, например,

char str[6]={'Б,'Г','Т','У','!','\0'};

При инициализации достаточно длинных строк такой способ не совсем удобен, поэтому в языке Си предусмотрели более простой вариант, который выглядит как

charstr[6]=";БГТУ!";

В этом случае ноль-символ указывать не нужно, он будет добавлен в конец строки автоматически. Можно еще больше упростить данную запись.

charstr[]=";БГТУ!";

или

char *str=";БГТУ!";

В данном случае компилятор языка сам определит длину строки и выделит под нее необходимую память.

При инициализации строки необходимо следить, чтобы длина строки не превышала размерность массива. Если это произошло, например,

charstr[5]=";Здравствуйте";

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

 

Объявляя массив символов, предназначенный для хранения строки, необходимо предусмотреть место для нуля, т.е. указать его размер в объявлении на один символ больше, чем наибольшее предполагаемое количество символов. Например, объявление массива str, предназначенного для хранения строки из 10 символов, должно выглядеть так:

char str[11];

Последний, 11-й байт предназначен для нулевого символа.

Записанная в тексте программы строка символов, заключенных в двойные кавычки, является строковой константой, например,

"некоторая строка"

В конец строковой константы компилятор автоматически добавляет нулевой символ.

Для обработки строк в С определено много различных библиотечных функций. Чаще всего используются следующие функции:

Имя функции Выполняемое действие
strcpy(s1,s2) Копирование s2 в s1
strcat(s1,s2) Конкатенация (присоединение) s2 в конец s1
strlen(s1) Возвращает длину строки s1
strcmp(s1,s2) Возвращает 0, если s1 и s2 совпадают, отрицательное значение, если s1<s2 и положительное значение, если s1>s2
strchr(s1,ch) Возвращает указатель на первое вхождение символа ch в строку s1
strstr(s1,s2) Возвращает указатель на первое вхождение строки s2 в строку s1

Эти функции объявлены в заголовочном файле <string.h>. Применение библиотечных функций обработки строк иллюстрируется следующим примером:

В отличие от других языков программирования, в Си отсутствует строковый тип данных. Вместо него строка символов представляется в памяти ЭВМ как массив элементов типа char, в конце которого помещен нуль-символ ’\0’. Таким образом строка – это последовательность символов, оканчивающаяся нуль-символом. Нуль-символ как шестнадцатеричная константа представляется – 0x00.

 

Символы строки кодируются, например, ASCII-кодом, и в таком виде записываются в память ЭВМ.

При определении строк символы строки заключаются в двойные кавычки.

 

Существует следующие основные способы определения строк: 1) строковые константы; 2) массивы символов; 3) указатели на строки; Рассмотрим эти способы.

 

1. Строковые константы. Как только компилятор встречает нечто, заключенное в двойные кавычки, он определяет это как строку и размещает ее символы последовательно в памяти, добавляя в конце ’\0’. Для определения констант используется директива # define.

 

Пример

 # define STR

“Обнаружена новая цель”

. . . . . . . . .

printf (“Пример: % s”,STR);

2.  Массивы символов. Для определения массива, необходимо сообщить компилятору требуемый размер памяти. Это можно сделать поразному. Следующие три строки совершенно эквивалентны:

char str [ ] = ”Слово”;

 char str [6] = ”Слово”;

char str [6] = {’С’, ’л’, ’о’, ’в’, ’о’,’\0’};

3.  Указатели на строки. В качестве напоминания следует отметить, что имя массива есть указатель (константа) на нулевой элемент массива:

Пример .

 &str [0]< =>str, т.е. это – адрес нулевого элемента.

Обращение по этому адресу дает букву ’c’.

 сhar *pst = “еще строка”; Определение строки с помощью указателя.

Встретив такую запись, компилятор создает указанную строковую константу, а также переменную-указатель, которой присваивает адрес первого элемента строки.

 

Ввод-вывод строк

Ввод-вывод символьных строк можно производить различными способами. Рассмотрим основные из них

Ввод-вывод с помощью форматного ввода/вывода (средствами языка Си)

Для вывода строки символов на экран в функции printf( ) используется спецификатор % s и указывается имя символьного массива.

Пример:

printf(“%s”, string);

 Для ввода строки символов с клавиатуры в функции scanf( ) также используется спецификатор % s и имя символьного массива.

Пример:

scanf (“%s”, string);

Знак &(амперсанд) перед именем массива не ставится, т.к. оно и так является указателем (т.е. адресом). При записи строки с клавиатуры необходимо позаботиться, чтобы заданный размер символьного массива был достаточным для записи в него строки. В противном случае может произойти затирание следующих за массивом ячеек памяти.

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

Пример .

// VU_05.cpp : main project file.

 #include "stdafx.h"

#include <iostream>

 #include <stdio.h>

void main()

 {

 char data[10];

 printf("Enter the date\n");

 scanf("%s", data);

 printf("Today - %s\n", data);

 }


Дата добавления: 2021-07-19; просмотров: 101; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!