С чего начинается строка в C++ (String starts with)

Функция Vector Insert () в C++ Программирование и разработка

Приходит время, когда программист должен знать, с чего начинается строка. Эти знания можно использовать для выбора или исключения элементов в списке персонажей. Итак, программист может захотеть узнать, начинается ли строка с определенного символа или с определенной подстроки. Программист может написать код, который будет проверять начальные символы строки один за другим и сравнивать их с подстрокой префикса. Однако все задействованные стратегии уже реализованы в строковой библиотеке C ++.

Строковый класс C ++ библиотеки строк имеет функцию-член start_with (). Это делает работу программиста, но программист должен знать, как использовать функцию. И поэтому создается этот учебник. Существует три варианта строковой функции-члена start_with (). Варианты одной и той же функции называются перегруженными функциями.

Базовый подход к функции-члену start_with () заключается в сравнении короткой независимой подстроки с первым коротким сегментом рассматриваемой строки. Если они совпадают, функция возвращает true. Если они разные, функция возвращает false.

bool start_with (диаграмма x) const

Эта функция-член проверяет, начинается ли строковый литерал с определенного символа. Помните, что строковый литерал должен быть объектом, созданным из строкового класса. Следующая программа проверяет, начинается ли строка с буквы «W» в верхнем регистре:

#include <iostream>

#include <string>

using namespace std;

int main()

{

basic_string str = «We are moving on.»;

bool bl = str.starts_with(‘W’);

cout <<bl <<endl;

return 0;

}

На выходе должно быть 1, если истина.

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

#include <iostream>

#include <string>

using namespace std;

int main()

{

basic_string<char> str = «We are moving on.»;

bool bl = str.starts_with(‘w’);

cout <<bl <<endl;

return 0;

}

На выходе должно быть 0 для ложного.

Строка также может начинаться с неалфавитного символа. Следующая программа проверяет, начинается ли строка с символа ’[’:

#include <iostream>

#include <string>

using namespace std;

int main()

{

basic_string<char>str = «[Note: Note information — — -. — end note]»;

bool bl = str.starts_with(‘[‘);

cout <<bl <<endl;

return 0;

}

Выход должен быть 1, для истины

bool starts_with (const charT * x) const

Программист может захотеть узнать, начинается ли интересующая строка с конкретной независимой подстроки. В этом случае он должен использовать эту функцию-член. Следующая программа иллюстрирует это:

#include <iostream>

#include <string>

using namespace std;

int main()

{

basic_string str = «We are moving on.»;

const char* ss = «We are»;

bool bl = str.starts_with(ss);

cout <<bl <<endl;

return 0;

}

Вывод должен быть 1 для истины.

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

#include <iostream>

#include <string>

using namespace std;

int main()

{

basic_string<char> str = «We are moving on.»;

const char* ss = «WE ARE»;

bool bl = str.starts_with(ss);

cout <<bl <<endl;

return 0;

}

На выходе должно быть 0 для ложного.

Строка также может начинаться с небуквенных символов. Следующая программа проверяет, начинается ли строка с определенной подстроки чисел:

#include <iostream>

#include <string>

using namespace std;

int main()

{

basic_string<char>str = «8762HT is a code number.»;

const char* ss = «8762»;

bool bl = str.starts_with(ss);

cout <<bl <<endl;

return 0;

}

На выходе должно быть 1, если истина.

bool start_with (basic_string_view x) const

Аргументом функции-члена start_with может быть объект string_view. Следующий вопрос: «Что такое string_view?». String_view — это диапазон от некоторой исходной строки, который становится списком нового строкового объекта. Символы не копируются из исходной строки; на них есть ссылки. То есть элементы исходной строки не копируются; на них есть ссылки. Однако это строковое представление имеет много функций, которые есть у строкового класса. String_view также является классом, из которого создаются объекты string_view. Следующая программа показывает сходство класса string_view и строки:

#include <iostream>

#include <string_view>

using namespace std;

int main()

{

const char* str = «Everything that goes up must come down.»;

string_view strV(str, 23);

for (int i=0; i <strV.size(); i++)

cout <<strV[i];

cout <<endl;

return 0;

}

Результат:

Everything that goes up

Библиотека string_view должна быть включена. Обратите внимание, что в объявлении используется string_view, а не basic_string_view. Первые 23 символа исходной строки стали символами string_view. Оператор программы для построения объекта string_view:

string_view strV(str, 23);

Если изменяется символ в диапазоне исходной строки, вид строки также изменяется. Следующая программа иллюстрирует это:

#include <iostream>

#include <string_view>

using namespace std;

int main()

{

char str[] = «Everything that goes up must come down.»;

string_view strV(str, 23);

str[1] = ‘a’; str[2] = ‘r’;  str[3] = ‘l’;

for (int i=0; i <strV.size(); i++)

cout <<strV[i];

cout <<endl;

return 0;

}

Результат:

Earlything that goes up

Первый, второй и третий символы исходной строки были изменены после объявления объекта string_view. Это подтверждает, что, хотя string_view является объектом, он ссылается на диапазон в исходной строке и не имеет копии диапазона.

Текст исходной строки можно сделать постоянным. Для этого используйте константный указатель на char вместо массива символов. Следующая программа не компилируется, выдает сообщение об ошибке, поскольку текст исходной строки сделан постоянным:

#include <iostream>

#include <string_view>

using namespace std;

int main()

{

const char* str = «Everything that goes up must come down.»;

string_view strV(str, 23);

str[1] = ‘a’; str[2] = ‘r’;  str[3] = ‘l’;

for (int i=0; i <strV.size(); i++)

cout <<strV[i];

cout <<endl;

return 0;

}

Аргумент представления строки

Синтаксис функции string_starts ():

bool starts_with(basic_string_view<charT, traits>x) const

Как создать объект string_view было показано выше. После создания объекта передайте его в качестве аргумента строковой функции-члену start_with (). Следующая программа иллюстрирует это:

#include <iostream>

#include <string_view>

#include <string>

using namespace std;

int main()

{

const char* str = «Everything that goes up must come down.»;

string_view strV(str, 23);

const char* ss = «Everything»;

bool bl = str.starts_with(ss);

cout <<bl <<endl;

return 0;

}

Результат должен быть истинным для 1. На этот раз были включены библиотеки string и string_view.

Если программист хочет изменить исходную строку, он должен использовать массив символов в качестве аргумента конструктора string_view вместо постоянного указателя на char. Следующая программа показывает ситуацию, как изменится исходная строка:

#include <iostream>

#include <string_view>

#include <string>

using namespace std;

int main()

{

char str[] = «Everything that goes up must come down.»;

string_view strV(str, 23);

str[5] = ‘a’; str[6] = ‘r’;  str[7] = ‘l’; str[8] = ‘r’;  str[9] = ‘l’;

const char* ss = «Everyapple»;

bool bl = str.starts_with(ss);

cout <<bl <<endl;

return 0;

}

На выходе должно быть 1, если истина.

Даже если аргумент функции-члена start_with () является объектом string_view, регистр по-прежнему соблюдается. Следующая программа иллюстрирует это:

#include <iostream>

#include <string_view>

#include <string>

using namespace std;

int main()

{

char str[] = «Everything that goes up must come down.»;

string_view strV(str, 23);

const char* ss = «everything»;

bool bl = str.starts_with(ss);

cout <<bl <<endl;

return 0;

}

На выходе должно быть 0 для ложного. Первая буква «е» в подстроке находится в нижнем регистре, а первая «е» в интересующей строке — в верхнем регистре.

Если аргументом функции-члена start_with () является string_view, то неалфавитные символы все еще могут быть частью строк. В следующей программе проверяется набор последовательных целочисленных символов, если они начинают интересующую строку, где аргумент start_with () является string_view:

#include <iostream>

#include <string_view>

#include <string>

using namespace std;

int main()

{

const char* str = «8762HT is a code number.»;

string_view strV(str);

const char* ss = «8762»;

bool bl = str.starts_with(ss);

cout <<bl <<endl;

return 0;

}

Вывод должен быть 1 для истины.

Заключение

Строковый класс в C ++ имеет функцию-член start_with (). Он проверяет, формирует ли подчиненная независимая строка первые символы интересующей строки (префикса). Перегруженными функциями-членами являются start_with (charT x), start_with (const charT * x) и start_with (string_view x).

Читайте также:  Python или JavaScript: сравнение, что лучше, что перспективнее
Оцените статью
bestprogrammer.ru
Добавить комментарий