@twistfire92
Python backend developer
s='aaaaaabaaaaabaaaabaaaab'
pos = s.find('b',s.find('b')+1)
В переменную pos будет записано второе вхождение символа ‘b’
По сути, вторым параметром в методе find() указываешь позицию, следующую после первого вхождения нужного символа
Ответ написан
более трёх лет назад
Комментировать
Комментировать
I have heard that JavaScript has a function called search()
that can search for a string ( lets call it A ) in another string ( B ) and it will return the first position at which A was found in B.
var str = "Ana has apples!";
var n = str.search(" ");
The code should return 3 as its the first position in which the space was found in str
.
And I was wondering if there is a function that can find the next spaces in my string.
For example I want to find the length of the first word in my string and I could easily do this If I knew the its starting position and its ending one.
If there is such a function, are there any better than it for such things?
Salman A
259k82 gold badges428 silver badges520 bronze badges
asked Jun 29, 2018 at 12:06
6
You need to use String.indexOf
method. It accepts the following arguments:
str.indexOf(searchValue[, fromIndex])
So you can do this:
var str = "Ana has apples!";
var pos1 = str.indexOf(" "); // 3
var pos2 = str.indexOf(" ", pos1 + 1); // 7
console.log(pos2 - pos1 - 1); // 3... length of the second word
answered Jun 29, 2018 at 12:49
Salman ASalman A
259k82 gold badges428 silver badges520 bronze badges
.indexOf(…)
will give you the first occurence of the " "
(starting at 0):
var str = "Ana has apples!";
var n = str.indexOf(" ");
console.log(n);
If you want all occurences, this can be achieved easily using a RegExp
with a while
:
var str = "Ana has apples! A lot.";
var re = new RegExp(" ","ig");
var spaces = [];
while ((match = re.exec(str))) {
spaces.push(match.index);
}
// Output the whole array of results
console.log(spaces);
// You can also access the spaces position separately:
console.log('1st space:', spaces[0]);
console.log('2nd space:', spaces[1]);
⋅
⋅
⋅
Or… you can use a do {} while ()
loop:
Then, you can make a function of it:
var str = "Ana has apples! A lot.";
// Function
function indexsOf(str, sub) {
var arr = [],
i = 0,
n = 0;
do {
n = str.indexOf(" ");
if (n > -1) {
i += n;
arr.push(i);
str = str.slice(n + 1);
i++;
}
}
while (n > -1);
return arr;
}
var spaces = indexsOf(str, ' ')
// Output the whole array of results
console.log(spaces);
// You can also access the spaces position separately:
console.log('1st space:', spaces[0]);
console.log('2nd space:', spaces[1]);
⋅
⋅
⋅
Hope it helps.
answered Jun 29, 2018 at 12:16
Takit IsyTakit Isy
9,6263 gold badges22 silver badges47 bronze badges
2
Better for matching is to use regex
. There is option like match group using group 'g'
flag
var str = "Ana has apples !";
var regBuilder = new RegExp(" ","ig");
var matched = "";
while((matched = regBuilder.exec(str))){
console.log(matched + ", position : " +matched.index);
}
str = "Ana is Ana no one is better than Ana";
regBuilder = new RegExp("Ana","ig");
while((matched = regBuilder.exec(str))){
console.log(matched + ", position : " +matched.index);
}
'i'
flag used to ignore case sensitive
You can check for other flags too here
answered Jun 29, 2018 at 12:34
Onk_rOnk_r
8364 silver badges21 bronze badges
Try this:
const str = "Ana has apples!";
const spaces = str.split('')
.map((c, i) => (c === ' ') ? i : -1)
.filter((c) => c !== -1);
console.log(spaces);
Then you will all the spaces positions.
answered Jun 29, 2018 at 12:44
Alex GAlex G
1,8772 gold badges9 silver badges15 bronze badges
2
Дана строка. Найдите в этой строке второе вхождение буквы f и выведите индекс этого вхождения. Если буква f в данной строке встречается только один раз, выведите число -1, а если не встречается ни разу, выведите число -2. Индексы нумеруются с нуля.
Вот мой код:
#include <iostream>
#include <string>
using namespace std;
int main() {
string a; // объявление строки
cin >> a; // ввод строки
for(int i=0, number = 0;i<a.size();i++) { // цикл для поиска второго вхождения
if (a[i] == 'f') { // если индекс равен букве "f"
if (++number == 2) { // если это вторая буква
cout << i << endl; // то вывести индекс
break;
}
int res = 0;
char f = 'f';
for (int i=0;i<a.length();i++) { // цикл для того, чтобы посчитать, сколько раз буква "f" встречается в введённом слове
if (a[i] == f) { // если буква равна "f"
res++; // то увеличить "res"
if (res == 1) { // если буква встречается 1 раз
cout << "-1" << endl; // то вывести -1
} else if (res == 0) { // если буквы вообще нет
cout << "-2" << endl; // то вывести -2
}
}
}
}
}
return 0;
}
Подскажите, пожалуйста, что я делаю неправильно? Когда пытаюсь вывести «-1» или «-2», то программа работает неправильно.
Harry
214k15 золотых знаков117 серебряных знаков229 бронзовых знаков
задан 28 окт 2020 в 9:21
11
for(int i=0, number = 0; i < a.size(); i++)
{
if (a[i] == 'f')
{
if (++number == 2)
{
cout << i << endl;
break;
}
}
}
ответ дан 28 окт 2020 в 9:25
HarryHarry
214k15 золотых знаков117 серебряных знаков229 бронзовых знаков
5
Не зря же написали методы std::string
. Они написаны, чтобы было удобно работать со строками, и если вы их не используете, то работайте с обычными массивами. Если же использовать, то получим код компактней и защищенный от ошибок. Результат получится одной строчкой:
std::string a("coffee");
std::cout << a.find('f', a.find('f') + 1);
Если не уверены, что в строке найдется этот символ, то нужно выполнить с проверкой:
size_t i = a.find('f') + 1;
if (i < a.size())
cout << a.find('f', i);
ответ дан 28 окт 2020 в 9:42
AR HovsepyanAR Hovsepyan
15.8k3 золотых знака13 серебряных знаков30 бронзовых знаков
#include <iostream>
#include <string>
#include <algorithm>
int main () {
std::string s;
std::cin >> s;
int c = std::count(s.begin(), s.end(), 'f');
int i = s.find("ff") + 1;
std::cout << "c=" << c << std::endl;
std::cout << "index=" << i << std::endl;
}
ответ дан 28 окт 2020 в 18:26
TigerTV.ruTigerTV.ru
3,1851 золотой знак10 серебряных знаков21 бронзовый знак
Часто нам нужно найти символ в строке python. Для решения этой задачи разработчики используют метод find()
. Он помогает найти индекс первого совпадения подстроки в строке. Если символ или подстрока не найдены, find возвращает -1.
Синтаксис
string.find(substring,start,end)
Метод find
принимает три параметра:
substring
(символ/подстрока) — подстрока, которую нужно найти в данной строке.start
(необязательный) — первый индекс, с которого нужно начинать поиск. По умолчанию значение равно 0.end
(необязательный) — индекс, на котором нужно закончить поиск. По умолчанию равно длине строки.
Параметры, которые передаются в метод, — это подстрока, которую требуются найти, индекс начала и конца поиска. Значение по умолчанию для начала поиска — 0, а для конца — длина строки.
В этом примере используем метод со значениями по умолчанию.
Метод find()
будет искать символ и вернет положение первого совпадения. Даже если символ встречается несколько раз, то метод вернет только положение первого совпадения.
>>> string = "Добро пожаловать!"
>>> print("Индекс первой буквы 'о':", string.find("о"))
Индекс первой буквы 'о': 1
Поиск не с начала строки с аргументом start
Можно искать подстроку, указав также начальное положение поиска.
В этом примере обозначим стартовое положение значением 8 и метод начнет искать с символа с индексом 8. Последним положением будет длина строки — таким образом метод выполнит поиска с индекса 8 до окончания строки.
>>> string = "Специалисты назвали плюсы и минусы Python"
>>> print("Индекс подстроки 'али' без учета первых 8 символов:", string.find("али", 8))
Индекс подстроки 'али' без учета первых 8 символов: 16
Поиск символа в подстроке со start и end
С помощью обоих аргументов (start
и end
) можно ограничить поиск и не проводить его по всей строке. Найдем индексы слова «пожаловать» и повторим поиск по букве «о».
>>> string = "Добро пожаловать!"
>>> start = string.find("п")
>>> end = string.find("ь") + 1
>>> print("Индекс первой буквы 'о' в подстроке:", string.find("о", start, end))
Индекс первой буквы 'о' в подстроке: 7
Проверка есть ли символ в строке
Мы знаем, что метод find()
позволяет найти индекс первого совпадения подстроки. Он возвращает -1
в том случае, если подстрока не была найдена.
>>> string = "Добро пожаловать!"
>>> print("Есть буква 'г'?", string.find("г") != -1)
Есть буква 'г'? False
>>> print("Есть буква 'т'?", string.find("т") != -1)
Есть буква 'т'? True
Поиск последнего вхождения символа в строку
Функция rfind()
напоминает find()
, а единое отличие в том, что она возвращает максимальный индекс. В обоих случаях же вернется -1
, если подстрока не была найдена.
В следующем примере есть строка «Добро пожаловать!». Попробуем найти в ней символ «о» с помощью методов find()
и rfind()
.
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом rfind:", string.rfind("о"))
Поиск 'о' методом rfind: 11
Вывод показывает, что find()
возвращает индекс первого совпадения подстроки, а rfind()
— последнего совпадения.
Второй способ поиска — index()
Метод index()
помогает найти положение данной подстроки по аналогии с find()
. Единственное отличие в том, что index()
бросит исключение в том случае, если подстрока не будет найдена, а find()
просто вернет -1
.
Вот рабочий пример, показывающий разницу в поведении index()
и find()
:
>>> string = "Добро пожаловать"
>>> print("Поиск 'о' методом find:", string.find("о"))
Поиск 'о' методом find: 1
>>> print("Поиск 'о' методом index:", string.index("о"))
Поиск 'о' методом index: 1
В обоих случаях возвращается одна и та же позиция. А теперь попробуем с подстрокой, которой нет в строке:
>>> string = "Добро пожаловать"
>>> print("Поиск 'г' методом find:", string.find("г"))
Поиск 'г' методом find: 1
>>> print("Поиск 'г' методом index:", string.index("г"))
Traceback (most recent call last):
File "pyshell#21", line 1, in module
print("Поиск 'г' методом index:", string.index("г"))
ValueError: substring not found
В этом примере мы пытались найти подстроку «г». Ее там нет, поэтому find()
возвращает -1, а index()
бросает исключение.
Поиск всех вхождений символа в строку
Чтобы найти общее количество совпадений подстроки в строке можно использовать ту же функцию find()
. Пройдемся циклом while по строке и будем задействовать параметр start
из метода find()
.
Изначально переменная start
будет равна -1, что бы прибавлять 1 у каждому новому поиску и начать с 0. Внутри цикла проверяем, присутствует ли подстрока в строке с помощью метода find.
Если вернувшееся значение не равно -1, то обновляем значением count.
Вот рабочий пример:
my_string = "Добро пожаловать"
start = -1
count = 0
while True:
start = my_string.find("о", start+1)
if start == -1:
break
count += 1
print("Количество вхождений символа в строку: ", count )
Количество вхождений символа в строку: 4
Выводы
- Метод
find()
помогает найти индекс первого совпадения подстроки в данной строке. Возвращает -1, если подстрока не была найдена. - В метод передаются три параметра: подстрока, которую нужно найти,
start
со значением по умолчанию равным 0 иend
со значением по умолчанию равным длине строки. - Можно искать подстроку в данной строке, задав начальное положение, с которого следует начинать поиск.
- С помощью параметров
start
иend
можно ограничить зону поиска, чтобы не выполнять его по всей строке. - Функция
rfind()
повторяет возможностиfind()
, но возвращает максимальный индекс (то есть, место последнего совпадения). В обоих случаях возвращается -1, если подстрока не была найдена. index()
— еще одна функция, которая возвращает положение подстроки. Отличие лишь в том, чтоindex()
бросает исключение, если подстрока не была найдена, аfind()
возвращает -1.find()
можно использовать в том числе и для поиска общего числа совпадений подстроки.
Задача «Второе вхождение» Решение
Условие
Дана строка. Найдите в этой строке второе вхождение буквы f
, и выведите индекс этого вхождения. Если буква f
в данной строке встречается только один раз, выведите число -1
, а если не встречается ни разу, выведите число -2
.
Решение
s = input() if s.count('f') == 1: print(-1) elif s.count('f') < 1: print(-2) else: print(s.find('f', s.find('f') + 1))