在c ++中如何从startIndex开始搜索字符串的一部分,并在一些字符数之后结束。在某些情况下,我只需要搜索前5个字符中的特殊字符串或字符串为什么我必须覆盖整个字符串,它可能是1000个字符或倍数。我所知道的在c ++运行时库中,所有函数都不支持类似的东西,例如 strchr 它会搜索所有字符串,我不希望我想要比较[]到[]的字符串的特定部分。我已经看到使用 wmemchr 解决该问题的方法,但我需要它依赖于当前选择的语言环境,如果有人知道如何做到这一点,我将不胜感激。
另外如何直接比较2个字符与区域设置?
答案 0 :(得分: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]){...做某事......}
答案 1 :(得分:0)
您可以使用std::substr来限制搜索范围:
std::string str = load_some_data();
size_t pos = str.substr(5).find('a');
答案 2 :(得分: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)作为第二种或第三种方法的缓冲区