При работе с текстами необходимо использовать или функцию 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);