Строки в С++
- Библиотека обработки строк Библиотека обработки строк string.h. Примеры: Конкатенация строк, Поиск символов.
Строковая константа - это последовательность из нуля или более символов, заключенных в кавычки. Кавычки не являются частью строковой константы, а служат только для ее ограничения. Строки представляются в виде массива элементов типа char. Это означает, что символы строки можно представить расположенными в соседних ячейках памяти - по одному символу в ячейке.
Но массив символов - не всегда строка!
Не следует путать символьную константу со строкой, содержащей один символ: 'Х' - это не то же самое, что "Х". В первом случае - это отдельный символ. Во втором случае - это строка, состоящая из одного символа (буквы Х) и символа конца строки '\0'.
Правила инициализации строковых массивов
#include <iostream> using namespace std; int n=5; char line[] = "Cat!"; // Инициализация строкового массива. void main () { cout << "Word: "; // Показ на экран строкового массива. cout <<line; }
Строки и указатели
В программе доступ к строке осуществляется с помощью указателя на символ. Если описать переменную message как
char *message;
то в результате выполнения оператора
message = "and bye!";
message станет указателем на строку.
#include <iostream> using namespace std; int main () { char *message; char privet[] = "and bye!"; char *pr = privet; message = "Hello"; cout << " " << message << " " << pr << "\n"; int i = 0; while (*(pr+i)!='\0') { cout<< *(pr+i++) << " "; } }
Использование указателей часто применяется при работе с массивом строк. В этом случае к каждой строке можно обратиться с помощью указателя на его первый символ. Это удобно тем, что для перестановки двух строк, расположенных в неправильном порядке, фактически достаточно переставить указатели в массиве указателей, а не сами строки.
Рассматривается функция month_name(), которая возвращает указатель на строку, содержащий имя n-го месяца. Это типичная задача для использования строкового массива.
Функция month_name() содержит локальный массив строк и при обращении к ней возвращает указатель на нужную строку.
В описании массива указателей на символы name[] инициализатором является просто список строк. Символы i-й строки помещаются в определенное место памяти, а указатель на ее начало хранится в элементе name[i]. Поскольку размер массива name не указан, компилятор сам подсчитывает количество инициализаторов и соответственно устанавливает правильное число.
#include <iostream> using namespace std; char *month_name(int); int main () { const int n=15; for (int i=0; i < n; i++) cout << "Month number " << i << " - " << month_name(i) <<"\n"; } char *month_name (int k) /* Название k-го месяца */ { static char *name[] = { "none","January", "February","March","April", "May","June","July","August", "September","October","November", "December" }; return (k<1||k>12)?name[0]:name[k]; }
Результат работы программы:
Month number 0 - none Month number 1 - January Month number 2 - February Month number 3 - March Month number 4 - April Month number 5 - May Month number 6 - June Month number 7 - July Month number 8 - August Month number 9 - September Month number 10 - October Month number 11 - November Month number 12 - December Month number 13 - none Month number 14 - none Press any key to continue
Крупнейшая в Европе школа английского языка
Промокоды, акции и подарки, чтобы Ваше обучение было не только интересным, но и выгодным. Закажите пробный урок уже сейчас!
skyeng.ru
Онлайн школа английского языка
Английский по скайпу от 680р за урок, без заучивания правил. Эффективно! Удобно! Выгодно! Начните обучение прямо сейчас.
melene.ru
Школа английского языка по Skype
Персональные занятия по разумным ценам. Бесплатные ресурсы для студентов: разговорные клубы, блог, вебинары, книги, тест на определение уровня английского. Пробный урок бесплатно!
englex.ru