Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2186 / 522 | Длительность: 24:14:00
Лекция 8:

Строки в языке C++

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >
Аннотация: В главе дано общее представление о строках в C++. Описана их структура, способы инициализации, возможности ввода-вывода, приведены примеры обработки строк и текстов.

8.1 Общие сведения о строках в C++

Строка — последовательность символов. Для работы с символами в языке C++ предусмотрен тип данных char. Если в выражении встречается одиночный символ, он должен быть заключён в одинарные кавычки. При использовании в выражениях строка заключается в двойные кавычки. Признаком конца строки является нулевой символ "\0". В C++ строки можно описать с помощью массива символов (массив элементов типа char), в массиве следует предусмотреть место для хранения признака конца строки ("\0").

Например,

char s [ 25 ]; //Описана строка из 25 символов.
char s [ 15 ]= "Привет"; //Описана строка из 15 символов и ей присвоено значение.
//Определён массив из 3 строк по 30 байт в каждой.
char m[ 3 ] [ 30 ] = { "Пример ", "использования", " строк"}

Для работы со строками можно использовать указатели (char *). Адрес первого символа будет начальным значением указателя.

Рассмотрим пример объявления и ввода строк.

#include <iostream>
using namespace std;
int main ( )
{
char s2 [ 2 5 ], *s3, s4 [ 30 ]; //Описываем 3 строки, s3 — указатель.
cout<<"Введите строку:"<<endl;
cout<<" s2 = "; cin>>s2; //Ввод строки s2.
cout<<"Была введена строка:"<<endl;
cout<<" s2 = "<<s2<<endl;
s3=s4; //Запись в s3 адреса строки s4. Теперь в указателях s3 и s4 хранится один адрес.
cout<<"Введите строку:"<<endl;
cout<<" s3 = "; cin>>s 3; //Ввод строки s3.
cout<<"Была введена строка:"<<endl;
cout<<" s3 = "<<s3<<endl; //Вывод на экран s3 и s4,
cout<<"Сформирована новая строка:"<<endl;
cout<<" s4 = "<<s4<<endl; //s3 и s4 — одно и тоже.
return 0;
}

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

Введите строку:
s2=Привет!
Была введена строка:
s2=Привет!
Введите строку:
s3=Программируем?
Была введена строка:
s3=Программируем?
Сформирована новая строка:
s4=Программируем?

Однако если во вводимых строках появятся пробелы, программа будет работать не так, как ожидает пользователь:

Введите строку:
s2=Привет, Вася!
Была введена строка:
s2=Привет,
Введите строку:
s3=Была введена строка:
s3=Вася!
Сформирована новая строка:
s4=Вася!

Дело в том, что функция cin вводит строки до встретившегося пробела. Более универсальной функцией является функция

cin.getline(char *s, int n);

она предназначена для ввода с клавиатуры строки s с пробелами, причём в строке не должно быть более n символов. Например,

char s [ 25 ];
cout<<"Введите строку:"<<endl;
cout<<" s2 = "; cin.getline ( s, 25 );
cout<<"Была введена строка:"<<endl;
cout<<" s2 = "<<s2<<endl;

Результат:

Введите строку:
s2=Привет, Вася!
Была введена строка:
s2=Привет, Вася!
< Лекция 7 || Лекция 8: 1234 || Лекция 9 >
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?