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

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

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >

8.2 Операции над строками

Строку можно обрабатывать как массив символов, используя алгоритмы обработки массивов, или с помощью специальных функций обработки строк, некоторые из которых приведены в табл. 8.1,табл. 8.2.

Таблица 8.1. Функции работы со строками, библиотека string.h
Прототип функции Описание функции Пример использования Результат
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
Таблица 8.2. Функции работы со строками, библиотека stdlib.h
Прототип функции Описание функции Пример использования Результат
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 годом!!!".

< Лекция 7 || Лекция 8: 1234 || Лекция 9 >
Сергей Радыгин
Сергей Радыгин

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

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

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

 

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

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