Что такое строка в программировании
Перейти к содержимому

Что такое строка в программировании

  • автор:

Тип данных String (Visual Basic)

Содержит последовательности 16-разрядных (2-байтовых) кодовых точек без знака в диапазоне от 0 до 65535. Каждая кодовая точка или код символа представляет один символ Юникода. Строка может содержать от 0 до примерно двух миллиардов (2 ^ 31) символов Юникода.

Комментарии

String Используйте тип данных для хранения нескольких символов без дополнительных Char() затрат на управление массивом , массив элементов Char .

Значение String по умолчанию — Nothing (пустая ссылка). Обратите внимание, что это не то же самое, что пустая строка (значение «» ).

Символы Юникода

Первые 128 кодовых точек (0–127) Юникода соответствуют буквам и символам на стандартной клавиатуре США. Эти первые 128 кодовых точек совпадают с теми, которые определяет набор символов ASCII. Вторые 128 кодовых точек (128–255) представляют специальные символы, такие как латинские буквы, диакритические знаки, символы валют и дроби. Юникод использует оставшиеся кодовые точки (256–65535) для широкого спектра символов. Сюда входят текстовые символы, диакритические знаки, математические и технические символы.

Для определения ее классификации в Юникоде можно использовать такие методы, как IsDigit и IsPunctuation для отдельного символа в переменной String .

Требования к формату

Литерал String необходимо заключить в кавычки ( » » ). Если в качестве одного из символов в строке необходимо включить кавычки, используйте две смежные кавычки ( «» ). Это показано в следующем примере.

Dim j As String = "Joe said ""Hello"" to me." Dim h As String = "Hello" ' The following messages all display the same thing: ' "Joe said "Hello" to me." MsgBox(j) MsgBox("Joe said " & """" & h & """" & " to me.") MsgBox("Joe said """ & h & """ to me.") 

Обратите внимание, что смежные кавычки, представляющие кавычки в строке, не зависят от кавычек, которые начинаются и заканчиваются String литералом.

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

После назначения строки переменной String она становится неизменяемой, что означает, что вы не сможете изменить ее длину или содержимое. При любом изменении строки Visual Basic создает новую строку и отменяет предыдущую. Затем String переменная указывает на новую строку.

Управлять содержимым переменной String можно с помощью различных строковых функций. В следующем примере показана Left функция

Dim S As String = "Database" ' The following statement sets S to a new string containing "Data". S = Microsoft.VisualBasic.Left(S, 4) 

Строка, созданная другим компонентом, может быть заполнена начальными или конечными пробелами. Если вы получили такую строку, можно использовать Trimфункции , LTrimи RTrim для удаления этих пробелов.

Дополнительные сведения о манипуляциях со строками см. в разделе Строки.

Советы по программированию

  • Отрицательные числа. Помните, что символы, хранящиеся в , String не имеют знака и не могут представлять отрицательные значения. В любом случае не следует использовать для String хранения числовых значений.
  • Вопросы взаимодействия. При взаимодействии с компонентами, не написанными для платформа .NET Framework, например с объектами автоматизации или COM, помните, что в других средах строковые символы имеют другую ширину данных (8 бит). Если вы передаете строковый аргумент из 8-разрядных символов в такой компонент, объявите его как Byte() массив Byte элементов, а не String в новом коде Visual Basic.
  • Символы типов. Добавление символа $ типа идентификатора к любому идентификатору приводит его к типу String данных. String не имеет символа литерального типа. Однако компилятор рассматривает литералы, заключенные в кавычки ( » » ), как String .
  • Тип Framework. Соответствующим типом в платформа .NET Framework является System.String класс .

См. также раздел

  • System.String
  • Типы данных
  • Тип данных Char
  • Type Conversion Functions
  • Сводка по преобразованию
  • Практическое руководство. Вызов функции Windows, принимающей значение беззнакового типа
  • Эффективное использование типов данных

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Строки

Мы уже рассматривали строки как простой тип данных наряду с целыми и вещественными числами и знаем, что строка – это последовательность символов, заключенных в одинарные или двойные кавычки.

В Python нет символьного типа – типа данных, объектами которого являются одиночные символы. Однако язык позволяет рассматривать строки как объекты, состоящие из подстрок длинной в один и более символов. При этом, в отличие от списков, строки не принято относить к структурам данных. Видимо потому, что структуры данных состоят из более простых типов данных, а для строк в Python нет более простого (символьного) типа.

С другой стороны, строка, как и список, – это упорядоченная последовательность элементов. Следовательно, из нее можно извлекать отдельные символы и срезы.

>>> s = "Hello, World!" >>> s[0] 'H' >>> s[7:] 'World!' >>> s[::2] 'Hlo ol!'

В последнем случае извлечение идет с шагом, равным двум, то есть извлекается каждый второй символ. Извлекать срезы с шагом также можно из списков.

Важным отличием от списков является неизменяемость строк в Python. Нельзя перезаписать какой-то отдельный символ или срез в строке:

>>> s[-1] = '.' Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment

Интерпретатор сообщает, что объект типа str не поддерживает присвоение элементам.

Если требуется изменить строку, то можно создать новую из срезов старой:

>>> s = s[0:-1] + '.' >>> s 'Hello, World.'

В примере берется срез из исходной строки, соединяется с другой строкой. Получается новая строка, которая присваивается переменной s . Ее старое значение при этом теряется.

Методы строк

В Python для строк есть множество методов. Посмотреть их можно по команде dir(str) , получить информацию по каждому – help(str.имя_метода) . Рассмотрим наиболее интересные из них.

Методы split() и join()

Метод split() позволяет разбить строку по пробелам. В результате получается список слов. Если пользователь вводит в одной строке ряд слов или чисел, каждое из которых должно в программе обрабатываться отдельно, то без split() не обойтись.

>>> s = input() red blue orange white >>> s 'red blue orange white' >>> sl = s.split() >>> sl ['red', 'blue', 'orange', 'white'] >>> s 'red blue orange white'

Список, возвращенный методом split() , мы могли бы присвоить той же переменной s , то есть s = s.split() . Тогда исходная строка была бы потеряна. Если она не нужна, то лучше не вводить дополнительную переменную.

Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:

>>> s.split('e') ['r', 'd blu', ' orang', ' whit', ''] >>> '40030023'.split('00') ['4', '3', '23']

Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:

>>> '-'.join(sl) 'red-blue-orange-white'

Если разделитель не нужен, то метод применяется к пустой строке:

>>> ''.join(sl) 'redblueorangewhite'

Методы find() и replace()

Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.

>>> s 'red blue orange white' >>> s.find('blue') 4 >>> s.find('green') -1

Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:

>>> letters = 'ABCDACFDA' >>> letters.find('A', 3) 4 >>> letters.find('DA', 0, 6) 3

Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение letters.find(‘A’, 3) последнюю букву ‘A’ не находит, так как ‘A’ ему уже встретилась под индексом 4.

Метод replace() заменяет одну подстроку на другую:

>>> letters.replace('DA', 'NET') 'ABCNETCFNET'

Исходная строка, конечно, не меняется:

>>> letters 'ABCDACFDA'

Так что если результат надо сохранить, то его надо присвоить переменной:

>>> new_letters = letters.replace('DA', 'NET') >>> new_letters 'ABCNETCFNET'

Метод format()

Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print() :

>>> print("This is a . It's .".format("ball", "red")) This is a ball. It's red.

Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.

Возможности format() широкие, рассмотрим основные.

>>> s1 = "length - <>, width - <>, height - <>" >>> s1.format(3, 6, 2.3) 'length - 3, width - 6, height — 2.3'

Если фигурные скобки исходной строки пусты, то подстановка аргументов идет согласно порядку их следования. Если в фигурных скобках строки указаны индексы аргументов, порядок подстановки может быть изменен:

>>> s2 = "height - , length - " >>> s2.format(3, 6) 'height - 6, length - 3'

Кроме того, аргументы могут передаваться по слову-ключу:

>>> info = "This is a . It's ." >>> info.format(subj="table", prop="small") "This is a table. It's small."

Пример форматирования вещественных чисел:

>>> " ".format(3.33333, 10/6) '1.67 3.333'

Практическая работа

  1. Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for , строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower() , проверяющие регистр строки или символа.
  2. Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Типы данных

В большинстве применений компьютера алфавитно-цифровая информация используется наряду с числовой. Прежде чем мы сможем написать программу, которая манипулирует алфавитно-цифровыми знаками (литерами), нам потребуется тип данных для их представления. Для этих целей в языке Паскаль предусмотрен тип данных char. Так же, как переменная типа integer может хранить одно целое число, переменная типа char может хранить один символ. Например,

Var
Alpha : char;
Begin
Alpha :=’p’;
Alpha :=’+’;
Alpha :=’3′;
Alpha :=’ ‘;
Alpha :=»»;

Первый оператор присваивания записывает в переменную Alpha литеру р. Второй делает Alpha равной литере плюса (+). Третий делает Alpha равной символу 3. Заметим, что символ 3 отличается от целого числа 3 тем, что символ не может быть использован в арифметических операциях. Четвертый оператор присваивания делает Alpha равной литере пробела. Хотя литера пробела при печати не изображается, она является обыкновенным значением типа char. Последний оператор присваивания делает Alpha равной литере апострофа, это специальный случай, так как знак апострофа используется для ограничения значения типа char. Мы будем пользоваться множеством литер, находящимся в таблице кодов, называемой ASCII — американский стандартный код обмена информацией. Все символы упорядочены, т.к. имеют свой личный номер. Важно, что соблюдаются следующие отношения: ‘A’ < 'B' < 'C' < . < 'X' < 'Y' < 'Z' '0' < '1' < '2' < . < '7' < '8' < '9'Для проверки равенства или неравенства переменных типа char могут использоваться операторы сравнения. Задача. Написать программу, которая считывает две литеры и печатает больше, равна или меньше первая литера второй.

Program Sravnenie;
Var
First, Second : char;
Begin
write (‘Введите две литеры: ‘);
readln (First, Second);
write (‘Первая литера ‘);
if First > Second
then
write (‘больше второй. ‘)
else
if First = Second
then
write (‘равна второй. ‘)
else
write (‘меньше второй. ‘);
Еnd.

Так как char — порядковый тип, то к его значениям применимы следующие функции.

Succ — возвращает следующий символ литерного множества; Pred — возвращает предыдущий символ литерного множества; Ord — возвращает значение кода литеры; Chr — возвращает значение литеры по ее коду, является обратной по отношению к функции Ord.

Например, Succ(‘0′)=’1’ — символ, следующий за символом 0, равен символу 1. Pred(‘3′)=’2′ — символ, предшествующий символу 3, равен 2; Chr(65)=’A’ — символ, соответствующий коду 65, равен А; Ord(‘A’)=65 — код символа А равен 65.

Строки

Наиболее типичным использованием одномерного массива являются строки. Хотя С не определяет строкового типа, имеется поддержка строковых операций с помощью функций, имеющихся в любом языке. В С строка определяется как символьный массив произвольной длины, оканчивающийся нулевым символом. Нулевой символ определяется как ‘\0’. Поэтому необходимо объявлять символьные массивы на один символ больше, чем требуется для хранения самой длинной строки. Например, если необходимо объявить массив s, содержащий десятисимвольную строку, следует написать:

В результате этого выделяется место в конце строки для нулевого символа.

Хотя С не имеет строкового типа данных, имеются строковые константы. Строковые константы -это список символов, заключенных в двойные кавычки. Ниже показаны две строковые константы:

«hello there» «this is a test»

He надо добавлять нулевой символ в конец строковой константы, поскольку компилятор С выполняет это автоматически.

С поддерживает множество функций для работы со строками. Наиболее типичными являются strcpy(), strcat(), strlen() и strcmp() со следующими прототипами:

char *strcpy(char *s1, const char *s2);

char *strcat(char *s1, const char *s2);

size_t strlen(const char *s1);

int strcmp(const char *s1, const char *s2);

Все функции используют заголовочный файл string.h. Функция strcpy() копирует строку, на которую указывает s2, в строку, на которую указывает s1. Функция возвращает s1. Функция strcat() выполняет конкатенацию строки, на которую указывает s2, и строки, на которую указывает s1. Она также возвращает s1. Функция strlen() возвращает длину строки, на которую указывает s1. (Тип данных size_t определяется, используя typedef как беззнаковое целое.) Функция strcmp() сравнивает s1 и s2. Она возвращает 0, если две строки эквивалентны, число большее 0 — если строка, на которую указывает s1, больше, чем строка, на которую указывает s2, и число меньшее 0 — если строка, на которую указывает s1, меньше, чем строка, на которую указывает s2. Все сравнения выполняются лексикографически (согласно порядку словаря). Следующая программа демонстрирует использование данных строковых функций:

#include
#include
int main(void)
char s1[80], s2[80];
gets (s1); gets (s2);
printf(«lengths: %d %d\n», strlen(s1), strlen(s2));
if(!strcmp(s1, s2)) printf(«The strings are equal\n»);
strcat(s1, s2);
printf(«%s\n», s1);
return 0;
>

Если при запуске программы ввести строки «hello» и «hello», в результате получится:

length: 5 5
The strings are equal
hellohello

Важно понять, что strcmp() возвращает ложь, если строки не равны. Поэтому можно использовать ! для инверсии состояния, как показано в данном примере.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *