как искать часть строки, а не все

в C ++, как искать только часть строки, начиная с startIndex и заканчивая после некоторого числа символов. в некоторых случаях мне просто нужно найти в первых 5 символах специальный символ или строку, почему мне нужно будет найти всю строку, это может быть 1000 символов или кратное число. что я знаю в библиотеке времени выполнения c ++, все функции, например, не поддерживают что-то подобное strchr он будет искать всю строку, я не хочу, чтобы я хотел сравнить определенную часть строки от [] до []. Я видел решение этой проблемы с помощью wmemchr но мне нужно, чтобы он зависел от текущей выбранной локали, если кто-нибудь знает, как это сделать, буду благодарен.

Кроме того, как сравнить только 2 символа непосредственно с языком?

0

Решение

Я не знаю, как сделать это напрямую со стандартной библиотекой, но вы можете довольно легко создать свою собственную функцию и 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]) {… сделать что-то …}

0

Другие решения

Ты можешь использовать станд :: зиЬзЬг ограничить область поиска:

std::string str = load_some_data();
size_t pos = str.substr(5).find('a');
0

Я решил это так

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) в качестве буфера для второго или третьего метода

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector