Самая первая написанная вами программа на C++, вероятно, выглядела примерно так:
#include int main()
Так что точно такое » Hello, world! «? » Hello, world! » представляет собой набор последовательных символов, называемый строкой. В C++ мы используем строки для представления текста, такого как имена, адреса, слова и предложения. Строковые литералы (например, » Hello, world!n «) помещаются в двойные кавычки, чтобы идентифицировать их как строки.
Поскольку в программах строки обычно используются, большинство современных языков программирования включают в себя базовый строковый тип данных. В C++ строки не являются базовым типом (на самом деле они являются составным типом и определены в стандартной библиотеке C++, а не как часть ядра языка). Но строки достаточно просты и полезны, поэтому мы представим их здесь, а не будем дожидаться главы о составных типах (глава 8).
std::string
Чтобы использовать строки в C++, нам сначала нужно включить через #include заголовочный файл , чтобы ввести объявления для std::string . Как только это будет сделано, мы сможем определить переменные типа std::string .
#13. Магические методы __str__, __repr__, __len__, __abs__ | ООП Python
#include // разрешает использование std::string std::string myName <>; // пустая строка
Вы можете инициализировать или присваивать значения строкам, как и обычным переменным, что и следовало ожидать:
std::string myName< «Alex» >; // инициализируем myName строковым литералом «Alex» myName = «John»; // присваиваем переменной myName строковый литерал «John»
Обратите внимание, что строки также могут содержать числа:
std::string myID< «45» >; // «45» не то же самое, что целое число 45!
В строковой форме числа обрабатываются как текст, а не как числа, и поэтому ими нельзя манипулировать как числами (например, вы не можете их умножать). C++ не будет автоматически преобразовывать строковые числа в целочисленные значения или значения с плавающей запятой.
Вывод строк
Строки можно выводить, как и ожидалось, с помощью std::cout :
#include #include int main() < std::string myName< «Alex» >; std::cout
Эта программа печатает:
My name is: Alex
Пустые строки ничего не напечатают:
#include #include int main() < std::string empty< >; std::cout
Эта программа напечатает:
Ввод строк с помощью std::cin
Использование строк с std::cin может преподнести сюрпризы! Рассмотрим следующий пример:
#include #include int main() < std::cout ; std::cin >> name; // это не будет работать должным образом, // так как std::cin прерывается на пробелах std::cout ; std::cin >> age; std::cout
Ниже показаны результаты пробного запуска этой программы:
Enter your full name: John Doe Enter your age: Your name is John and your age is Doe
Хммм, это неправильно! Что случилось? Оказывается, что при использовании operator>> для извлечения из cin строки operator>> возвращает только символы до первого попавшегося пробела. Все остальные символы остаются внутри std::cin в ожидании следующего извлечения.
# Введение в Python 3 | Урок 2 | Работа со строками | Команды str и int
Поэтому, когда мы использовали operator>> для извлечения строки в переменную name , было извлечено только » John «, оставив » Doe » внутри std::cin . Когда мы снова использовали operator>> для получения переменной age , он извлек » Doe » вместо того, чтобы ждать, пока мы введем возраст. На этом программа заканчивается.
Для ввода текста используйте std::getline()
Чтобы прочитать всю строку входных данных в переменную строки, лучше вместо этого использовать функцию std::getline() . std::getline() принимает два параметра: первый – это std::cin , а второй – ваша строковая переменная.
Вот та же программа, что и выше, с использованием std::getline() :
#include // для std::string и std::getline #include #include // для std::ws int main() < std::cout ; std::getline(std::cin >> std::ws, name); // считываем полную строку текста в name std::cout ; std::getline(std::cin >> std::ws, age); // считываем полную строку текста в age std::cout
Теперь наша программа работает как и ожидалось:
Enter your full name: John Doe Enter your age: 23 Your name is John Doe and your age is 23
Что еще за std::ws ?
В уроке «4.8 – Числовые типы с плавающей точкой» мы обсудили манипуляторы вывода, которые позволяют нам изменять способ отображения выводимых значений. В том уроке мы использовали функцию манипулятора вывода std::setprecision() , чтобы изменить количество значащих цифр, отображаемых std::cout .
C++ также поддерживает манипуляторы ввода (определенные в заголовке iomanip ), которые изменяют способ приема входных данных. Манипулятор ввода std::ws говорит std::cin игнорировать любые начальные пробелы. Обратите внимание, что std::ws не является функцией.
Давайте разберемся, чем он полезен. Рассмотрим следующую программу:
#include #include int main() < std::cout ; std::cin >> choice; std::cout ; std::getline(std::cin, name); // примечание: здесь нет std::ws std::cout
Вот пример результата работы этой программы:
Pick 1 or 2: 2 Now enter your name: Hello, , you picked 2
Данная программа сначала просит вас ввести 1 или 2 и ждет, когда вы это сделаете. Пока всё хорошо. Затем она просит вас ввести свое имя. Однако на самом деле она не будет ждать, пока вы введете свое имя!
Вместо этого она печатает строку » Hello «, а затем завершит работу. Что случилось?
Оказывается, когда вы вводите значение с помощью operator>> , std::cin не только захватывает значение, но также захватывает символ новой строки (‘ n ‘), который появляется, когда вы нажимаете клавишу Enter . Итак, когда мы набираем 2 и нажимаем Enter , std::cin получает строку » 2n «. Затем он извлекает 2 в переменную choice , оставляя символ новой строки на потом. Затем, когда std::getline() переходит к чтению имени, он видит, что » n » уже находится в потоке, и полагает, что мы, должно быть, ввели пустую строку! Это определенно не то, что было задумано.
Урок 4
Работа со строками
Учимся выполнять основные действия над строковым типом данных в Python: создание, экранирование, конкатенация и умножение, срезы, форматирование, строковые методы.
Курс «Программирование на Python»
Урок 4
Работа со строками
Учимся выполнять основные действия над строковым типом данных в Python: создание, экранирование, конкатенация и умножение, срезы, форматирование, строковые методы.
Предыдущий урок
Урок 3. Функции, условные выражения и циклы
Следующий урок
Урок 5. Модули и пакеты в Python. Импорт. Виртуальная среда venv.
ТЕОРЕТИЧЕСКИЙ БЛОК
В КОНЦЕ УРОКА ЕСТЬ ВИДЕО
Что такое строка и как ее создать в Python?
Строки в Python — упорядоченные неизменяемые последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.
Последовательности в Python
Последовательность(Sequence Type) — итерируемый контейнер, к элементам которого есть эффективный доступ с использованием целочисленных индексов.
Последовательности могут быть как изменяемыми, так и неизменяемыми. Размерность и состав созданной однажды неизменяемой последовательности не может меняться, вместо этого обычно создаётся новая последовательность.
- Список (list) — изменяемая
- Кортеж (tuple) — неизменяемая
- Диапазон (range) — неизменяемая
- Строка (str, unicode) — неизменяемая
Строки можно создать несколькими способами:
1. С помощью одинарных и двойных кавычек.
Например:
first_string = ‘Я текст в одинарных кавычках’ second_string = «Я текст в двойных кавычках»
Строки в одинарных и двойных кавычках — одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в строки символы кавычек, не используя экранирование. Например вот так(обратите внимание на кавычки внутри строки):
first_string = ‘Слово «Python» обычно подразумевает змею’ second_string = «I’m learning Python»
2. С помощью тройных кавычек.
Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд. Пример:
my_string = »’Это очень длинная строка, ей нужно много места»’
Способы создания строк в Python
3. С помощью метода str() .
Как это работает:
my_num = 12345 my_str = str(my_num)
В данном случае мы создали новую строку путем конвертации переменной другого типа(например, int ).
Экранирование строк
Экранированные последовательности — это служебные наборы символов, которые позволяют вставить нестандартные символы, которые сложно ввести с клавиатуры.
В таблице перечислены самые часто используемые экранированные последовательности:
n;Перевод строки r; Возврат каретки t; Горизонтальная табуляция v;Вертикальная табуляция uhhhh;16-битовый символ Юникода в 16-ричном представлении x…;16-ричное значение o…;8-ричное значение
Теперь посмотрим, как каждая из них работает:
# Обычная строка >>> str = ‘Моя строка вот такая’ >>> print(str) Моя строка вот такая # Добавим символ переноса строки >>> str = ‘Моя строкаn вот такая’ >>> print(str) Моя строка вот такая # А теперь добавим возврат каретки >>> str = ‘Моя строкаn вотr такая’ >>> print(str) Моя строка такая # Горизонтальная табуляция(добавит отступ) >>> str = ‘tМоя строка вот такая’ >>> print(str) Моя строка вот такая # Вертикальная табуляция(добавит пустую строку) >>> str = ‘vМоя строка вот такая’ >>> print(str) Моя строка вот такая # Добавим китайский иероглиф в строку >>> str = ‘Моя строка u45b2 вот такая’ >>> print(str) Моя строка 䖲 вот такая
«Сырые строки»
Если перед открывающей кавычкой стоит символ ‘r’ (в любом регистре), то механизм экранирования отключается.
Это может быть нужно, например, в такой ситуации:
str = r’C:new_file.txt’
Методы для работы со строками
Методов для работы со строками довольно много. Может возникнуть вопрос — а как же не запутаться в их многообразии? Ответ на него такой — необходимо структурировать и разбить методы по группам.
Работа со строками в Python. Классификация методов.
Итак, строки в Python поддерживают две группы методов:
- Списки( list )
- Кортежи( tuple )
- Диапазоны( range ).
- Обработки двоичных данных( binary data ) и
- Текстовых строк( str ).
x in s; Если элемент присутствует в последовательности, то возвращает True, иначе — False x not in s; Возвращает True, если элемент отсутствует в последовательности. s + t; Конкатенация(сложение) двух последовательностей s * n; Эквивалентно сложению последовательности s с собой n раз s[i]; Возвращает i-й элемент последовательности s[i, j]; Возвращает набор элементов последовательности с индексами из диапазона i
Подробнее об общих операциях для Sequence Type данных можно почитать в официальной документации по Python.
Подытожим
Строки в Python — представители Sequence Type данных. Это значит, что они(наряду со списками, кортежами и диапазонами) поддерживают все операции, приведенные в таблице выше.
Группа 2. Дополнительные методы, которые работают только со строками
Помимо общих операций, которые мы рассмотрели в таблице выше, существуют методы, которые могут быть использованы только для работы с типом str . В ходе урока рассмотрим самые важные и часто используемые из них.
Операции со строками. Конкатенация и умножение.
Строки в Python. Конкатенация и умножение.
Далее будем рассматривать базовые операции, которые можно выполнять со строками. Начнем со сложения и умножения строк. Они, как мы уже выяснили выше, относятся к группе общих операций над последовательностями. Итак:
1. Оператор сложения строк +
+ — оператор конкатенации строк. Он возвращает строку, состоящую из совокупности других строк.
Например:
>>> a = ‘Вот так работает’ >>> b = ‘ конкатенация строк’ >>> a + b ‘Вот так работает конкатенация строк’
2. Оператор умножения строк *
* — оператор создает несколько копий строки. Если str это строка, а n целое число, то будет создано n копий строки str .
>>> str = ‘Строка’ >>> 5 * str ‘СтрокаСтрокаСтрокаСтрокаСтрока’
Операции со строками. Срезы.
Срезы так же относятся к группе общих операций — они используются для всех последовательностей, а значит и для строковых переменных. Рассмотрим подробнее, что это такое и с чем его едят.
Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.
Индекс — номер символа в строке (а также в других структурах данных: списках, кортежах). Обратите внимание, что нумерация начинается с 0 . Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 .
Есть три формы срезов:
1. Самая простая форма среза — взятие одного символа строки — S[i] , где S — строка, i — индекс. Пример:
>>> str = ‘Hello’ >>> str[0] ‘H’ >>> str[4] ‘o’ >>> str[-5] ‘H’ >>> str[6] Traceback (most recent call last): File «», line 1, in IndexError: string index out of range
2. Второй тип — срез с двумя параметрами. Т. е. S[a:b] возвращает подстроку, начиная с символа c индексом a до символа с индексом b , не включая его. Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Пример:
>>> str = ‘Hello’ >>> str[0:4] ‘Hell’ >>> str[0:5] ‘Hello’ >>> str[1:3] ‘el’ >>> str[1:] ‘ello’ >>> str[0:] ‘Hello’
3. Срез с тремя параметрами — S[a:b:d] . Третий параметр задает шаг(как в случае с функцией range ), то есть будут взяты символы с индексами a, a + d, a + 2 * d и т. д. Например, при задании значения третьего параметра, равному 2 , в срез попадет каждый второй символ:
>>> str = ‘Hello’ >>> str[0:5:1] ‘Hello’ >>> str[::1] ‘Hello’ >>> str[0:5:2] ‘Hlo’ >>> str[::2] ‘Hlo’
И еще разок: строки в Python — это неизменяемый тип данных!
Любые операции среза со строкой создают новые строки и никогда не меняют исходную строку. В Питоне строки вообще являются неизменяемыми, их невозможно изменить. Можно лишь в старую переменную присвоить новую строку.
Задачи по темам
Решаем задачи и отвечаем на вопросы по теме «Списки»: работаем с типом данных list
Специфика типа данных словарь (dict) в Python, характеристики. Примеры использования словарей, задачи с решениями.
Строки как тип данных в Python. Основные методы и свойства строк. Примеры работы со строками, задачи с решениями.
Операции со строками. Дополнительные методы.
Далее давайте рассмотрим методы второй группы, которые были созданы специально для работы с данными типа str . Полный и актуальный список методов можно посмотреть на странице официальной документации. И как вы сможете заметить, их там немало. Мы же с вами перечислим самые полезные из них и популярные, а так же рассмотрим несколько примеров их использования. Итак, список:
1. Работа с регистром строки
s.capitalize(); Преобразует первую букву первого слова строки s в букву в верхнем регистре, все остальные буквы преобразуются в буквы в нижнем регистре. s.title(); Преобразует первые буквы всех слов строки s в буквы верхнего регистра, все остальные буквы слов преобразует в буквы нижнего регистра. s.upper(); Преобразует все буквы строки s в буквы верхнего регистра. s.lower(); Преобразует все буквы строки s в буквы нижнего регистра. s.swapcase(); Преобразует все буквы верхнего регистра в буквы нижнего регистра, а буквы нижнего регистра преобразует в буквы верхнего регистра. s.isupper(); Возвращает True, если все символы строки, поддерживающие приведение к регистру, приведены к верхнему, иначе — False. s.islower(); Возвращает True, если все символы строки, поддерживающие приведение к регистру, приведены к нижнему, иначе — False. s.istitle();Определяет, начинаются ли слова строки с заглавной буквы. Возвращает True, когда s не пустая строка и первый алфавитный символ каждого слова в верхнем регистре, а все остальные буквенные символы в каждом слове строчные. Иначе — False.
Пример того, как именуются различные строки(и соответствующие методы) в зависимости от регистра:
А теперь для лучшего понимания добавим несколько примеров использования данных методов:
# Делаем строку заголовком >>> str.title(‘hello everybody’) ‘Hello Everybody’ # Начинаем строку с заглавной буквы >>> str.capitalize(‘hello everybody’) ‘Hello everybody’ # Переводим строку в верхний регистр >>> str.upper(‘hello everybody’) ‘HELLO EVERYBODY’ # Переводим строку в нижний регистр >>> str.lower(‘Hello Everybody’) ‘hello everybody’ # Инверсия регистра >>> str.swapcase(‘Hello Everybody’) ‘hELLO eVERYBODY’ # Проверяем, являются ли строки заголовками >>> str.istitle(‘Hello everybody’) False >>> str.istitle(‘HELLO EVERYBODY’) False >>> str.istitle(‘Hello Everybody’) True
2. Объединение и разбивка строк
x.join(iterable); Возвращает строку, собранную из элементов указанного объекта, поддерживающего итерирование(например, список строк). s.split(x); Разбивает строку s на части, используя специальный разделитель x, и возвращает эти части в виде списка. s.partition(x); Принимает в качестве аргумента разделитель x (любой символ, букву или цифру). Слева-направо ищет в строке s первый встречающийся разделитель х и в месте разделителя разрезает строку на 3 части: 1) голову(часть строки до разделителя), 2) разделитель и 3) хвост(часть строки после разделителя). Метод возвращает кортеж(tuple), состоящий из трех элементов (голова, разделитель, хвост)
Источник: smartiqa.ru
Класс String в Java
Класс String в Java предназначен для работы со строками в Java. Все строковые литералы, определенные в Java программе (например, «abc») — это экземпляры класса String. Давай посмотрим на его ключевые характеристики:
- Класс реализует интерфейсы Serializable и CharSequence . Поскольку он входит в пакет java.lang , его не нужно импортировать.
- Класс String в Java — это final класс, который не может иметь потомков.
- Класс String — immutable класс, то есть его объекты не могут быть изменены после создания. Любые операции над объектом String, результатом которых должен быть объект класса String, приведут к созданию нового объекта.
- Благодаря своей неизменности, объекты класса String являются потокобезопасными и могут быть использованы в многопоточной среде.
- Каждый объект в Java может быть преобразован в строку через метод toString , унаследованный всеми Java-классами от класса Object .
Работа с Java String
Это один из самых часто используемых классов в Java. В нем есть методы для анализа определенных символов строки, для сравнения и поиска строк, извлечения подстрок, создания копии строки с переводом всех символов в нижний и верхний регистр и прочие. Список всех методов класса String можно изучить в официальной документации. Также в Java реализован несложный механизм конкатенации (соединения строк), преобразования примитивов в строку и наоборот. Давай рассмотрим некоторые примеры работы с классом String в Java.
Создание строк
Проще всего создать экземпляр класса String, присвоив ему значение строкового литерала:
String s = «I love movies»;
- создать объект, содержащий пустую строку
- создать копию строковой переменной
- создать строку на основе массива символов
- создать строку на основе массива байтов (с учетом кодировок)
- и т.д.
Сложение строк
Сложить две строки в Java довольно просто, воспользовавшись оператором + . Java позволяет складывать друг с другом и переменные, и строковые литералы:
public static void main(String[] args)
Складывая объекты класса String с объектами других классов, мы приводим последние к строковому виду. Преобразование объектов других классов к строковому представлению выполняется через неявный вызов метода toString у объекта. Продемонстрируем это на следующем примере:
Сравнение строк
Для сравнения строк можно воспользоваться методом equals() :
public static void main(String[] args) < String x = «Test String»; System.out.println(«Test String».equals(x)); // true >
Когда при сравнении строк нам не важен регистр, нужно использовать метод equalsIgnoreCase() :
public static void main(String[] args) < String x = «Test String»; System.out.println(«test string».equalsIgnoreCase(x)); // true >
Перевод объекта/примитива в строку
Для перевода экземпляра любого Java-класса или любого примитивного типа данных к строковому представлению, можно использовать метод String.valueOf() :
Перевод строки в число
Часто бывает нужно перевести строку в число. У классов оберток примитивных типов есть методы, которые служат как раз для этой цели. Все эти методы начинаются со слова parse. Рассмотрим ниже перевод строки в целочисленное ( Integer ) и дробное ( Double ) числа:
public static void main(String[] args) < Integer i = Integer.parseInt(«12»); Double d = Double.parseDouble(«12.65D»); System.out.println(i); // 12 System.out.println(d); // 12.65 >
Перевод коллекции строк к строковому представлению
- join(CharSequence delimiter, CharSequence. elements)
- join(CharSequence delimiter, Iterable elements)
public static void main(String[] args) < Listpeople = Arrays.asList( «Philip J. Fry», «Turanga Leela», «Bender Bending Rodriguez», «Hubert Farnsworth», «Hermes Conrad», «John D. Zoidberg», «Amy Wong» ); String peopleString = String.join(«; «, people); System.out.println(peopleString); /* Вывод: Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong */ >
Разбиение строки на массив строк
Эту операцию выполняет метод split(String regex) В качестве разделителя выступает строковое регулярное выражение regex . В примере ниже произведем операцию, обратную той, что мы выполняли в предыдущем примере:
public static void main(String[] args) < String people = «Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong»; String[] peopleArray = people.split(«; «); for (String human : peopleArray) < System.out.println(human); >/* Вывод: Philip J. Fry Turanga Leela Bender Bending Rodriguez Hubert Farnsworth Hermes Conrad John D. Zoidberg Amy Wong */ >
Определение позиции элемента в строке
- indexOf(int ch)
- indexOf(int ch, int fromIndex)
- indexOf(String str)
- indexOf(String str, int fromIndex)
- lastIndexOf(int ch)
- lastIndexOf(int ch, int fromIndex)
- lastIndexOf(String str)
- lastIndexOf(String str, int fromIndex)
- ch — искомый символ ( char )
- str — искомая строка
- fromIndex — позиция с которой нужно искать элемент
- методы indexOf — возвращают позицию первого найденного элемента
- методы lastIndexOf — возвращают позицию последнего найденного элемента
public static void main(String[] args) < String alphabet = «ABCDEFGHIJKLMNOPQRSTUVWXYZ»; System.out.println(alphabet.indexOf(‘A’)); // 0 System.out.println(alphabet.indexOf(‘K’)); // 10 System.out.println(alphabet.indexOf(‘Z’)); // 25 System.out.println(alphabet.indexOf(‘Я’)); // -1 >
Извлечение подстроки из строки
- substring(int beginIndex)
- substring(int beginIndex, int endIndex)
public static void main(String[] args) < String filePath = «D:\Movies\Futurama.mp4»; int lastFileSeparatorIndex = filePath.lastIndexOf(‘\’); String fileName = filePath.substring(lastFileSeparatorIndex + 1); System.out.println(fileName); //9 >
Перевод строки в верхний/нижний регистр:
- toLowerCase()
- toUpperCase()
public static void main(String[] args) < String fry = «Philip J. Fry»; String lowerCaseFry = fry.toLowerCase(); String upperCaseFry = fry.toUpperCase(); System.out.println(lowerCaseFry); // philip j. fry System.out.println(upperCaseFry); // PHILIP J. FRY >
- Знакомство со String приводится на 1-ом уровне, 4-ой лекции квеста Java Syntax
- Внутреннее устройство String, метод substring изучаются на 2-ом уровне, 3-ей лекции квеста Java Multithreading
- Поиск, получение, удаление подстроки в String изучаются на 2-ом уровне, 4-ой лекции квеста Java Multithreading
- Метод String.format рассматривается на 2-ом уровне, 6-ой лекции квеста Java Multithreading
Дополнительные источники
- Строки в Java — статья раскрывает некоторые основы по работе со строками в Java.
- Java String. Вопросы к собеседованию и ответы на них, ч.1 — в данной статье рассматриваются вопросы к собеседованию по теме String , а также даются ответы на вопросы с пояснениями и примерами кода.
- Строки в Java (class java.lang.String) — в данной статье приводится более глубокий разбор класса String, а также рассматриваются тонкости работы с этим классом.
Источник: javarush.com