Студопедия

Главная страница Случайная страница

Разделы сайта

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






Указатель на символьную строку






По форме записи данная конструкция ничем не отличается от указателя на символьную переменную: char *S1;

где char – тип указателя на символ, S1 – переменная-указатель.

Для инициализации указателя требуется указать область памяти, где уже находится или будет находиться строка, при этом для строки должен быть выделен необходимый объем памяти.

Существует ряд способов инициализации указателя на строку:

· инициализация строковым литералом char *S1=" Yes";

· присваивание значение другого указателя char *S1=S;

где S – идентификатор массива или указатель на другую строку символов.

Указателю можно присваивать значение другого указателя: S1=S;

где S1 – переменная типа указатель; S – строковая константа, идентификатор массива или указатель на другую строку символов.

Например, char *S1, S[10]=" Yes"; S1=S;

При этом создаются переменная-указатель S1 и массив символов S, под который выделяется поле длиной 10 символов, 4 из которых будут заполнены. Затем в переменную-указатель записывается адрес символьного массива (рис. 11.1).

Рис. 11.1. Строковая константа и указатель

 

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

Ввод символьных строк с клавиатуры в языке C осуществляется с помощью функций scanf() и gets(), объявленных в заголовочном файле stdio.h. При работе с этими функциями следует помнить, что для строк предварительно должна быть выделена память. Конечный нуль добавляется после завершения ввода строки автоматически.

Существует несколько способов ввода строк:

· scanf (" %s", S1); где S1 – указатель типа char* на предварительно выделенную область. При использовании формата %s аргумент рассматривается как строка. Ввод строки реализуется до пробела или нажатия [Enter]. Несколько слов вводить в одну переменную с помощью scanf нельзя;

· scanf (" %Ns", S1); где N максимальноечисло символов, записываемых в строку S1. Заполнение строки заканчивается при вводе N непробельных символов или выполняется до первого пробельного символа.

· gets (S1); при помощи этой функции можно вводить строку, содержащую пробелы. Ввод прекращается при нажатии [Enter] или при заполнении буфера клавиатуры.

Вывод символьных строк на экран в C осуществляется с помощью функций printf() и puts():

· printf(" %s", S1); где S1 указатель типа char*

· puts (S1);

Вывод строки продолжается до символа'/0'.

Пример 1. Что напечатает ЭВМ?

#include < stdio.h>

#define STR " What is your name? "

int main()

{

char *ch;

static char ch1[]=" My name is George\n";

ch=STR;

printf(" \n%s \t %s", ch, ch1);

/*\t – табуляция – сдвиг на заданное количество позиций*/

for (int i=0; i< 6; i++)

{

printf(" \n %c", *(ch+i));

printf(" %c", *(ch1+i));

}

return 0;

}

На экране будут выведены строки:

What is your name? My name is George

W M
h y
a  
t n
  a
i m

Пример 2. Задан указатель на символьную строку. Подсчитать, сколько раз в строке встретится буква 'а':

# include < stdio.h>

int main()

{

int k;

char *S2=" Ivanov is an engineer";

for (k=0; (*S2)! = '\0'; S2++)

if ((*S2)=='a'||(*S2)=='A') k++;

printf(" \n number of \'a\' is %d", k);

return 0;

}

После завершения работы цикла указатель S2 указывает на конец строки, и доступ к этой строке теряется.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.