Как узнать номер символа в строке
БлогNot. C++: как узнать номер символа в строке
C++: как узнать номер символа в строке
Как известно, для определения позиции символа c в заданной указателем строке s можно использовать стандартную функцию strchr(s,c) , которая вернёт указатель на найденное вхождение символа или пустой указатель NULL , если ничего не найдено. Нетрудно реализовать подобную функцию и самостоятельно:
char *strchr (char *s, int c) < //Pointer to symbol c in string s or NULL if c not found in s while (*s) < if (*s==c) return s; s++; >return NULL; >
А вот для определения номера символа, под которым символ c находится в строке s (не забываем, что символы в строках C и C++ нумеруются с нуля) готовой функции нет. Наверное, она и не нужна — можно, например, вычитать указатели на найденный стандартной функцией strchr символ и на начало строки. Однако, при сложении-вычитании указателей можно как выйти за сегмент памяти (если используете старенькие DOS-эмуляторы), так и нажить другие трудноуловимые ошибки. Лучше написать собственную реализацию такой функции, назовём её strchrn . Она вернёт номер найденного символа (начиная с нуля) или -1, если символ c не встречается в строке s .
int strchrn (char *s, int c) < //Number of symbol c in string s or -1 if c not found in s int n=-1; while (*s) < n++; if (*s==c) return n; s++; >return -1; >
Задачу нетрудно расширить — например, выяснить номер первого из символов строки t , который встречается в строке s . Функция будет называться strchrs и использует предыдущую функцию:
int strchrs(char *s, char *t) < //Number of first symbol from t in s or -1, if no matches while (*t) < int r=strchrn(s,*t); if (r>-1) return r; t++; > return -1; >
Простейший тест всех трёх функций мог бы быть таким (дополнительно подключается стандартная библиотека ввода-вывода оператором #include ):
void main ()
20.04.2013, 12:18 [24212 просмотров]
Метод charCodeAt
Метод charCodeAt возвращает код символа (числовое значение), стоящего на определенной позиции в строке. Нумерация символов начинается с 0 . Если указанное число больше последнего символа строки, то метод возвращает NaN .
Синтаксис
строка.charCodeAt(номер символа в строке);
Пример
Давайте выведим код буквы ‘A’ (символа с позицией 0 ):
let str = ‘ABC’; let code = str.charCodeAt(0); console.log(code);
Результат выполнения кода:
Пример
Давайте поищем символ, номера которого нет в строке:
let str = ‘ABC’; let code = str.charCodeAt(4); console.log(code);
Результат выполнения кода:
Смотрите также
- метод String.fromCharCode ,
который выполняет обратную операцию - метод charAt ,
который возвращает символ, стоящий на указанной позиции в строке
Получение символов строки на JavaScript
Пусть у нас есть какая-то строка. Каждый символ в этой строке имеет свой порядковый номер: первый символ номер 0 , второй символ — номер 1 , третий символ номер 2 и так далее.
Как вы уже заметили, нумерация символов начинается с нуля (ноль как начало нумерации часто встречается в программировании).
При необходимости можно получить доступ к определенному символу строки по его номеру. Для этого пишется имя переменной, после этого имени ставятся квадратные скобки и в этих скобках указывается номер символа.
Давайте посмотрим на примере. Пусть у нас дана вот такая строка:
let str = ‘abcde’;
Давайте обратимся к каким-нибудь символам этой строки:
let str = ‘abcde’; alert(str[0]); // выведет ‘a’ alert(str[1]); // выведет ‘b’ alert(str[2]); // выведет ‘c’
Номер символа также может хранится и в переменной:
let str = ‘abcde’; let num = 3; // номер символа в переменной alert(str[num]); // выведет ‘d’
Дана строка ‘abcde’ . Обращаясь к отдельным символам этой строки выведите на экран символ ‘a’ , символ ‘c’ , символ ‘e’ .
Дана переменная со строкой ‘abcde’ . Обращаясь к отдельным символам этой строки запишите в новую переменную символы этой строки в обратном порядке, то есть ‘edcba’ .
Дана переменная str со строкой ‘abcde’ и переменная num с номером символа. Выведите на экран символ, номер которого хранится в переменной num .
Как узнать номер символа в строке
Строка считывается со стандартного ввода функцией input() . Напомним, что для двух строк определена операция сложения (конкатенации), также определена операция умножения строки на число.
Строка состоит из последовательности символов. Узнать количество символов (длину строки) можно при помощи функции len .
Любой другой объект в Питоне можно перевести к строке, которая ему соответствует. Для этого нужно вызвать функцию str() , передав ей в качестве параметра объект, переводимый в строку.
На самом деле каждая строка, с точки зрения Питона, — это объект класса str. Чтобы получить по объекту другой объект другого класса, как-то ему соответствующий, можно использовать функцию приведения. Имя этой функции совпадает с именем класса, к которому мы приводим объект. (Для знатоков: эта функция — это конструктор объектов данного класса.) Пример: int — класс для целых чисел. Перевод строки в число осуществляется функцией int() .
What is the answer? 42
s = input() print(len(s)) t = input() number = int(t) u = str(number) print(s * 3) print(s + ' ' + u)
2. Срезы (slices)
Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.
Есть три формы срезов. Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i . При этом считается, что нумерация начинается с числа 0. То есть если , то , , , , .
Заметим, что в Питоне нет отдельного типа для символов строки. Каждый объект, который получается в результате среза S[i] — это тоже строка типа str.
Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.
Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 . То есть , , , , .
Или в виде таблицы:
| Строка S | H | e | l | l | o |
| Индекс | S[0] | S[1] | S[2] | S[3] | S[4] |
| Индекс | S[-5] | S[-4] | S[-3] | S[-2] | S[-1] |
Если же номер символа в срезе строки S больше либо равен len(S) , или меньше, чем -len(S) , то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range .
Срез с двумя параметрами: S[a:b] возвращает подстроку из b — a символов, начиная с символа c индексом a , то есть до символа с индексом b , не включая его. Например, S[1:4] == ‘ell’ , то же самое получится если написать S[-4:-1] . Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчиватеся индексом -1, не включая его).
При использовании такой формы среза ошибки IndexError никогда не возникает. Например, срез S[1:5] вернет строку ‘ello’ , таким же будет результат, если сделать второй индекс очень большим, например, S[1:100] (если в строке не более 100 символов).
Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Например, чтобы удалить из строки первый символ (его индекс равен 0), можно взять срез S[1:] . Аналогично если опустить первый параметр, то можно взять срез от начала строки. То есть удалить из строки последний символ можно при помощи среза S[:-1] . Срез S[:] совпадает с самой строкой S .
Любые операции среза со строкой создают новые строки и никогда не меняют исходную строку. В Питоне строки вообще являются неизменяемыми, их невозможно изменить. Можно лишь в старую переменную присвоить новую строку.
На самом деле в питоне нет и переменных. Есть лишь имена, которые связаны с какими-нибудь объектами. Можно сначала связать имя с одним объектом, а потом — с другим. Можно несколько имён связать с одним и тем же объектом.
Если задать срез с тремя параметрами S[a:b:d] , то третий параметр задает шаг, как в случае с функцией range , то есть будут взяты символы с индексами a , , и т. д. При задании значения третьего параметра, равному 2, в срез попадет кажый второй символ, а если взять значение среза, равное -1 , то символы будут идти в обратном порядке. Например, можно перевернуть строку срезом S[::-1] .
s = 'abcdefg' print(s[1]) print(s[-1]) print(s[1:3]) print(s[1:-1]) print(s[:3]) print(s[2:]) print(s[:-1]) print(s[::2]) print(s[1::2]) print(s[::-1])