Перейти к содержимому

Как найти определенный символ в строке с

  • автор:

Нахождение позиции символа в строке

Есть строка, в ней нужно найти символ ‘=’ и записать его позицию в переменную. Какие существуют решения?

Отслеживать
4,179 1 1 золотой знак 27 27 серебряных знаков 41 41 бронзовый знак
задан 8 июл 2015 в 6:56
95 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков
Если вы таким образом собираетесь парсить что-нибудь, возможно, вы идёте неправильным путём.
8 июл 2015 в 9:18

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Для того, чтобы найти элемент в строке используется метод std::string:find , он вернет позицию первого вхождения. Если символ или подстрока не входят в исходную строку, вернет std::string::npos :

std::string equation = "1 + 2 = 4"; std::cout  

Отслеживать
ответ дан 8 июл 2015 в 7:02
4,179 1 1 золотой знак 27 27 серебряных знаков 41 41 бронзовый знак

Вы не сообщили, в объекте какого типа у вас хранится строка.

Ниже показана демонстрационная программа, которая осуществляет поиск символа в символьном массиве s1 и в объекте с именем s2 класса std::string .

#include #include #include int main() < char s1[] = "2 * 2 = 4"; std::string s2( s1 ); char c = '='; char *p = std::strchr( s1, c ); if ( p != nullptr ) < std::cout std::string::size_type n = s2.find( c ); if ( n != std::string::npos ) < std::cout > 

Вывод программы на консоль выглядит следующим образом:

Character '=' found at position 6 The rest of the string is "= 4" Character '=' found at position 6 The rest of the string is "= 4" 

String. Contains Метод

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Перегрузки

Возвращает значение, указывающее, встречается ли указанный символ внутри этой строки.

Возвращает значение, указывающее, встречается ли указанная подстрока внутри этой строки.

Возвращает значение, указывающее, встречается ли указанный символ внутри этой строки, используя указанные правила сравнения.

Возвращает значение, указывающее, встречается ли указанная строка внутри этой строки, используя указанные правила сравнения.

Contains(Char)

Возвращает значение, указывающее, встречается ли указанный символ внутри этой строки.

public: bool Contains(char value);
public bool Contains (char value);
member this.Contains : char -> bool
Public Function Contains (value As Char) As Boolean
Параметры

Символ для поиска.

Возвращаемое значение

Значение true , если параметр value выполняется внутри этой строки; в противном случае — значение false .

Комментарии

Этот метод выполняет порядковый номер (с учетом регистра и без учета языка и региональных параметров).

Применяется к

Contains(String)

Возвращает значение, указывающее, встречается ли указанная подстрока внутри этой строки.

public: bool Contains(System::String ^ value);
public bool Contains (string value);
member this.Contains : string -> bool
Public Function Contains (value As String) As Boolean
Параметры

Строка для поиска.

Возвращаемое значение

true , если параметр value встречается в строке или value является пустой строкой (""); в противном случае — false .

Исключения

value имеет значение null .

Примеры

В следующем примере определяется, является ли строка fox подстрокой знакомой кавычки. Если в строке найдена "fox", она также отображает ее начальную позицию.

using namespace System; int main() < String^ s1 = "The quick brown fox jumps over the lazy dog"; String^ s2 = "fox"; bool b = s1->Contains( s2 ); Console::WriteLine( "Is the string, s2, in the string, s1?: ", b ); if (b) < int index = s1->IndexOf(s2); if (index >= 0) Console::WriteLine("' begins at character position ", s2, index + 1); > > // This example displays the following output: // 'fox' is in the string 'The quick brown fox jumps over the lazy dog': True // 'fox begins at character position 17 
string s1 = "The quick brown fox jumps over the lazy dog"; string s2 = "fox"; bool b = s1.Contains(s2); Console.WriteLine("'' is in the string '': ", s2, s1, b); if (b) < int index = s1.IndexOf(s2); if (index >= 0) Console.WriteLine("' begins at character position ", s2, index + 1); > // This example displays the following output: // 'fox' is in the string 'The quick brown fox jumps over the lazy dog': True // 'fox begins at character position 17 
let s1 = "The quick brown fox jumps over the lazy dog" let s2 = "fox" let b = s1.Contains s2 printfn $"'' is in the string '': " if b then let index = s1.IndexOf s2 if index >= 0 then printfn $"' begins at character position " // This example displays the following output: // 'fox' is in the string 'The quick brown fox jumps over the lazy dog': True // 'fox begins at character position 17 
Class Example Public Shared Sub Main() Dim s1 As String = "The quick brown fox jumps over the lazy dog" Dim s2 As String = "fox" Dim b As Boolean = s1.Contains(s2) Console.WriteLine("'' is in the string '': ", s2, s1, b) If b Then Dim index As Integer = s1.IndexOf(s2) If index >= 0 Then Console.WriteLine("' begins at character position ", s2, index + 1) End If End If End Sub End Class ' ' This example displays the following output: ' 'fox' is in the string 'The quick brown fox jumps over the lazy dog': True ' 'fox begins at character position 17 

Комментарии

Этот метод выполняет порядковый номер (с учетом регистра и без учета языка и региональных параметров). Поиск начинается с первой позиции символа этой строки и продолжается до последней позиции символа.

Чтобы выполнить сравнение с учетом языка и региональных параметров или порядкового номера без учета регистра:

  • В .NET Core 2.1 и более поздних версиях: вместо этого вызовите перегрузку Contains(String, StringComparison) .
  • На платформа .NET Framework: создайте пользовательский метод. В следующем примере показан один из таких подходов. Он определяет String метод расширения, который включает StringComparison параметр и указывает, содержит ли строка подстроку при использовании указанной формы сравнения строк.
using System; public static class StringExtensions < public static bool Contains(this String str, String substring, StringComparison comp) < if (substring == null) throw new ArgumentNullException("substring", "substring cannot be null."); else if (! Enum.IsDefined(typeof(StringComparison), comp)) throw new ArgumentException("comp is not a member of StringComparison", "comp"); return str.IndexOf(substring, comp) >= 0; > > 
open System open System.Runtime.CompilerServices [] type StringExtensions = [] static member Contains(str: string, substring, comp: StringComparison) = if substring = null then invalidArg "substring" "substring cannot be null" if Enum.IsDefined(typeof, comp) |> not then invalidArg "comp" "comp is not a member of StringComparison" str.IndexOf(substring, comp) >= 0 
String s = "This is a string."; String sub1 = "this"; Console.WriteLine("Does '' contain ''?", s, sub1); StringComparison comp = StringComparison.Ordinal; Console.WriteLine(" : ", comp, s.Contains(sub1, comp)); comp = StringComparison.OrdinalIgnoreCase; Console.WriteLine(" : ", comp, s.Contains(sub1, comp)); // The example displays the following output: // Does 'This is a string.' contain 'this'? // Ordinal: False // OrdinalIgnoreCase: True 
let s = "This is a string." let sub1 = "this" printfn $"Does '' contain ''?" let comp = StringComparison.Ordinal printfn $" : " let comp2 = StringComparison.OrdinalIgnoreCase printfn $" : " // The example displays the following output: // Does 'This is a string.' contain 'this'? // Ordinal: False // OrdinalIgnoreCase: True 
Imports System.Runtime.CompilerServices Module StringExtensions Public Function Contains(str As String, substring As String, comp As StringComparison) As Boolean If substring Is Nothing Then Throw New ArgumentNullException("substring", "substring cannot be null.") Else If Not [Enum].IsDefined(GetType(StringComparison), comp) Throw New ArgumentException("comp is not a member of StringComparison", "comp") End If Return str.IndexOf(substring, comp) >= 0 End Function End Module 
Public Module Example Public Sub Main Dim s As String = "This is a string." Dim sub1 As String = "this" Console.WriteLine("Does '' contain ''?", s, sub1) Dim comp As StringComparison = StringComparison.Ordinal Console.WriteLine(" : ", comp, s.Contains(sub1, comp)) comp = StringComparison.OrdinalIgnoreCase Console.WriteLine(" : ", comp, s.Contains(sub1, comp)) End Sub End Module ' The example displays the following output: ' Does 'This is a string.' contain 'this'? ' Ordinal: False ' OrdinalIgnoreCase: True 

Если вас интересует позиция подстроки value в текущем экземпляре, можно вызвать IndexOf метод , чтобы получить начальную позицию первого вхождения, или метод LastIndexOf , чтобы получить начальную позицию последнего вхождения. Пример включает вызов метода , IndexOf(String) если подстрока найдена в экземпляре строки.

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

  • IndexOf(Char)
  • LastIndexOf(String)

Что такое функция find в Python?

Метод find() используется для поиска в строке. В качестве обязательного аргумента принимает строку, которую нужно найти. Метод возвращает индекс символа, с которого начинается искомая строка. Если строка не найдена, метод вернет -1 .

txt = 'Hello, welcome to my world.' x = txt.find('welcome') print(x) # => 7 

В качестве необязательных аргументов метод также принимает начало (с какого индекса начать поиск, по умолчанию это 0 - начало строки), а также конец (на каком индексе закончить поиск строки, по умолчанию поиск проводится по всей строке).

Нахождение позиции символа в строке в Python

Часто при работе со строками в Python возникает необходимость определить позицию определенного символа или подстроки внутри строки. Например, имеется строка 'Hello, World!' и необходимо найти позицию символа 'W' в ней.

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

Метод index()

Один из самых простых способов — использовать метод index() , который возвращает индекс первого вхождения указанного символа или подстроки. Например:

s = 'Hello, World!' pos = s.index('W')

В этом случае переменная pos будет содержать значение 7 , так как символ 'W' находится на позиции 7 (счет ведется с 0 ).

Если символ или подстрока отсутствуют в строке, метод index() вызовет исключение ValueError .

Метод find()

Еще одним способом является использование метода find() , который также возвращает индекс первого вхождения указанного символа или подстроки, но в отличие от метода index() , если символ или подстрока отсутствуют в строке, find() возвращает -1 , а не вызывает исключение.

Пример использования метода find() :

s = 'Hello, World!' pos = s.find('W')

В этом случае pos также будет равно 7 . Если бы символ 'W' отсутствовал в строке, pos был бы равен -1 .

Эти два метода являются основными инструментами для нахождения позиции символа или подстроки в строке в Python.

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

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