Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2201 / 531 | Длительность: 24:14:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Лекция 8:
Строки в языке C++
8.2 Операции над строками
Строку можно обрабатывать как массив символов, используя алгоритмы обработки массивов, или с помощью специальных функций обработки строк, некоторые из которых приведены в табл. 8.1,табл. 8.2.
Прототип функции | Описание функции | Пример использования | Результат |
---|---|---|---|
size_t strlen (const char *s) | Вычисляет длину строки s в байтах |
char s [80]; cout<<"s="; cin.getline (s,80); cout<<"s="<<s<<endl <<"Длина строки\t"<< strlen(s)<<endl; |
s=Hello, Russia! s=Hello, Russia! Длина строки 14 |
char _strcat(char *dest, const char *scr) | Присоединяет строку src в конец строки dest, полученная строка возвращается в качестве результата |
char s1[80],s2 [80]; cout<<"s1="; cin.getline (s1,80); cout<<"s2="; cin.getline (s2,80); cout<<"s="<<strcat(s1 ,s2); |
s1=Hello, s2=Russia! s=Hello, Russia! |
char *strcpy(char *dest, const char *scr) | Копирует строку src в место памяти, на которое указывает dest |
char s1[80],s2 [80]; cout<<"s1="; cin.getline (s1,80); strcpy(s2,s1); cout<<"s2="<<s2; |
s1=Hello,Russia! s2=Hello,Russia! |
char *strncat(char *dest, const char *src, size_t maxlen) | Присоединяет maxlen символов строки src в конец строки dest |
char s1[80],s2 [80]; cout<<"s1="; cin.getline (s1,80); cout<<"s2="; cin.getline (s2,80); cout<<"s="<<strncat( s1,s2,6); |
s1=Hello, s2=Russia! s=Hello, Russia |
char *strncpy(char *dest, const char *scr, size_t maxlen) | Копирует maxlen символов строки src в место памяти, на которое указывает dest |
char s1[80],s2 [80]; cout<<"s1="; cin.getline (s1,80); strncpy(s2,s1,5); cout<<"s2="<<s2; |
s1=Hello,Russia! s2=Hello |
int strcmp(const char *s1, const char *s2) | Сравнивает две строки в лексикографическом порядке с учётом различия прописных и строчных букв, функция возвращает 0, если строки совпадают, возвращает -1, если s1 располагается в упорядоченном по алфавиту порядке раньше, чем s2, и 1 в противоположном случае. |
char s1[80],s2 [80]; cout<<"s1="; cin.getline (s1,80); cout<<"s2="; cin.getline (s2,80); cout<<strcmp(s1,s2)<< endl; |
s1=RUSSIA s2=Russia -1 |
int strncmp(const char *s1, const char *s2, size_t maxlen) | Сравнивает maxlen символов двух строк в лексикографическом порядке, функция возвращает 0, если строки совпадают, возвращает -1, если s1 располагается в упо-рядоченном по алфавиту по-рядке раньше, чем s2, и 1 — в противоположном случае. |
char s1[80],s2 [80]; cout<<"s1="; cin.getline (s1,80); cout<<"s2="; cin.getline (s2,80); cout<<strncmp(s1,s2,6) ; |
s1=Hello,Russia! s2=Hello, 0 |
Прототип функции | Описание функции | Пример использования | Результат |
---|---|---|---|
double atof(const char*s) | Преобразует строку в вещественное число, в случае неудачного преобразова-ния возвращается число 0.0 |
char a[10]; cout<<"a="; cin>>a; cout<<"a="<<atof(a) <<endl; |
a=23.57 a=23.57 |
int atoi(const char*s | Преобразует строку в целое число, в случае неудачного преобразования возвращается число 0 |
char a[10]; cout<<"a="; cin>>a; cout<<"a="<<atoi(a) <<endl; |
a=23 a=23 |
long atol(const char*s) | Преобразует строку в длинное целое число, в случае неудачного преобразования возвращается число 0 |
char a[10]; cout<<"a="; cin>>a; cout<<"a="<<atol(a) <<endl; |
a=23 a=23 |
Для преобразования числа в строку можно воспользоваться функцией sprintf из библиотеки stdio.h.
sprintf(s, s1, s2);
Она аналогична описанной ранее функции printf, отличие состоит в том, что осуществляется вывод не на экран, а в выходную строку s.
Например, в результате работы следующих команд
char str[80]; sprintf (str, "%s %d %s", "С Новым ", 2014, "годом!!!");
в переменную str будет записана строка "С Новым 2014 годом!!!".