Функции для строковых переменных

При работе с текстами необходимо использовать или функцию cin.getline() или cin.get() заголовочного файла iostream.h.

Функция cin.getline() имеет следующий формат:

cin.getline(параметр1, параметр2);

где параметр1 соответствует имени строковой переменной, в которую будет записываться вводимый в режиме диалога с ЭВМ текст;

параметр2 определяет количество вводимых символов включая признак конца строки. Например:

char stroka[51];

cin.getline(stroka,51);

Этот фрагмент объявляет массив stroka из 50 символов, затем считывает строку из текста с клавиатуры в этот массив. Функция прекращает считывание символов в случае:

– если встречается символ-ограничитель ’\n’;

– если вводится указатель конца ввода ‘\0’ – нажатие клавиши ENTER;

– если количество символов оказывается на один меньше, чем указано во втором аргументе. Последний символ резервируется для завершающего нулевого символа.

Пример учебной программы на использования функции cin.getline():

#include <iostream.h>

#include <stdlib.h>

typedef char stringa[40];

stringa a[3];

int main()

{

system("echo Введите фамилию сотрудника");

cin.getline(a[0],40);

system("echo Введите имя сотрудника");

cin.getline(a[1],40);

system("echo Введите отчество сотрудника");

cin.getline(a[2],40);

cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;

system("PAUSE");

return 0;

}

Работа программы:

Введите фамилию сотрудника

Иванов

Введите имя сотрудника

Сергей

Введите отчество сотрудника

Петрович

Иванов Сергей Петрович

Для продолжения нажмите любую клавишу...

Функция cin.get() имеет следующий формат:

cin.get(параметр1,параметр2);

где параметр1 соответствует имени строковой переменной, в которую будет записываться вводимый в режиме диалога с ЭВМ текст;

параметр2 определяет количество вводимых символов включая признак конца строки. Например:

char stroka[51];

cin.get(stroka,51);

Этот фрагмент объявляет массив stroka из 50 символов, затем считывает строку из текста с клавиатуры в этот массив. Функция прекращает считывание символов в случае:

– если встречается символ-ограничитель ’\n’;

– если вводится указатель конца ввода ‘\0’ – нажатие клавиши ENTER;

– если количество символов оказывается на один меньше, чем указано во втором аргументе. Последний символ резервируется для завершающего нулевого символа.

Видимых отличий вроде нет, но функция cin.get() в ответ на нажатие клавиши ENTER, которая формирует два признака – конец ввода и переход на новую строку, реагирует только на признак конца ввода, а признак перехода на новую строку остается «висячим» в программе и может сбросить следующий ввод информации.

Если выполняется несколько последовательных вводов строковых переменных с помощью sin.get(), то в промежутках между вводами необходимо использовать запись cin.get(c), где с переменная типа char. Эта запись предназначена для устранения влияния символа ‘\n’ на следующий ввод, т.к. cin.get().

Если в рассмотренной ранее программе функции cin.getline() заменить на cin.get(), то работа программы будет иметь следующий вид:

Введите фамилию сотрудника?

Иванов

Введите имя сотрудника?

Введите отчество сотрудника?

Иванов

Для продолжения нажмите любую клавишу...

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

Добавим после каждой функции sin.get() функцию sin.get(с), которая будет компенсировать влияние признака ‘\n’.

#include <iostream.h>

#include <stdlib.h>

typedef char stringa[40];

stringa a[3];

char c;

int main()

{

system("echo Введите фамилию сотрудника?");

cin.getline(a[0],40);

cin.get(c);

system("echo Введите имя сотрудника?");

cin.getline(a[1],40);

cin.get(c);

system("echo Введите отчество сотрудника?");

cin.get(a[2],40);

cin.get(c);

cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;

system("PAUSE");

return 0;

}

Работа программы будет иметь следующий вид:

Введите фамилию сотрудника?

Иванов

Введите имя сотрудника?

Николай

Введите отчество сотрудника?

Васильевич

Иванов Николай Васильевич

Для продолжения нажмите любую клавишу...

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

Стандартная библиотека С++ имеет большой набор функций для работы со строковыми переменными. Для использования этих функций необходимо включить в программу заголовочный файл string.h.

Прототип
  char *strcpy(char *s1, const char *s2); Копирует строку s2 в массив символов s1 и возвращает значение s1 (размер s1 должен быть больше s2). Фактически s1 присваивается s2.
  char *strcat(char *s1, const char *s2); Добавляет строку s2 к строке s1. Первый символ строки s2 записывается поверх завершающего нулевого символа в s1. Поэтому возможно слияние строковых переменных. Возвращает s1.
  int strcmp(const char *s1, const char *s2); Сравнивает строки s1 и s2. Функция возвращает значение 0, если строки равны, меньше 0 (обычно -1), если s1 меньше s2, больше 0 (обычно +1), если s1 больше, чем s2.
  char *strrev(char *s); Полностью изменяет («переворачивает») строку. Изменяются все символы, кроме символа завершения. Например, строка string\0 изменится на строку gnirts\0.
  int strlen(const char *s); Определяет длину строки s. Возвращает количество символов, предшествующих завершающему нулевому элементу.
  char *strtok(char *s1, const char *s2); Ищет лексемы в строке s1, которые отделены разделителями, определенными во второй строке s2. Возвращаемое значение: указатель на лексему в s1. Указатель NULL возвращен, когда не имеется больше лексем.
  char *strlwr(char *s); Конвертирует (преобразовывает) прописные буквы в строке на нижний регистр.

Очень часто используется функция strlen(s), которая позволяет определять «длину» строковой переменной s.

Для сортировки слов текста или сравнения отдельных слов необходимо использовать функцию strcmp(), например, сравнение двух строковых переменных s1 и s2 осуществляется следующим образом:

if (strcmp(s1,s2)==0)

Присваивание одной строковой переменной значения другой строковой переменной выполняется с помощью функции strcpy(), например, необходимо строковой переменной s1 присвоить значение строковой переменной s2:

strcpy(s1,s2);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: