в c++ как искать только часть строки, начиная с startIndex и заканчивая после некоторого количества символов. в некоторых случаях мне просто нужно искать первые 5 символов для специального символа или строки, почему мне придется переходить ко всей строке, это может быть 1000 символов или кратных тому. что я знаю в библиотеке времени выполнения c++, все функции не поддерживают что-то вроде этого, например strchr, он будет искать всю строку, я не хочу, чтобы я хотел сравнить определенную часть строки с [] к []. Я видел решение этой проблемы с помощью wmemchr, но мне нужно, чтобы она зависела от выбранной в данный момент локали, если кто-нибудь знает, как это сделать, я был бы благодарен.
Также, как сравнить только 2 символа непосредственно относительно локали?
Я решил это так
int64 Compare(CHAR c1, CHAR c2, bool ignoreCase = false)
{
return ignoreCase ? _strnicoll(&c1, &c2, 1) : _strncoll(&c1, &c2, 1);
}
int64 IndexOf(const CHAR* buffer, CHAR c, uint count, bool ignoreCase = false)
{
for (uint i =0; i < count; i++)
{
if (Compare(*(buffer + i), c, ignoreCase) == 0)
{
return i;
}
}
return npos;
}
int64 LastIndexOf(const CHAR* buffer, CHAR c, uint count, bool ignoreCase = false)
{
while(--count >= 0)
{
if (Compare(*(buffer + count), c, ignoreCase) == 0)
{
return count;
}
}
return npos;
}
npos = -1
и указать начальный индекс индекса (buffer + startIndex) в качестве буфера для второго или третьего метода
Вы можете использовать std :: substr, чтобы ограничить область поиска:
std::string str = load_some_data();
size_t pos = str.substr(5).find('a');
Я не знаю, как это сделать непосредственно со стандартной библиотекой, но вы могли бы легко сделать свою собственную функцию и strstr.
/* Find str1 within str2, limiting str2 to n characters. */
char * strnstr( char * str1, const char * str2, size_t n )
{
char * ret;
char temp = str1[n]; // save our char at n
str2[n] = NULL; // null terminate str2 at n
ret = strstr( str1, str2 ); // call into strstr normally
str2[n] = temp; // restore char so str2 is unmodified
return ret;
}
Для вашего второго вопроса:
Также, как сравнить только 2 символа непосредственно относительно локали?
Я не уверен, что вы имеете в виду. Вы спрашиваете, как сравнивать два символа напрямую? Если это так, вы можете просто сравнить, как и любые другие значения. if (str1 [n] == str2 [n]) {... сделать что-то...}