Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Строки в языке 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=Привет, Вася!