如何搜索字符串的一部分而不是全部

时间:2013-10-15 01:55:05

标签: c++ string search crt

在c ++中如何从startIndex开始搜索字符串的一部分,并在一些字符数之后结束。在某些情况下,我只需要搜索前5个字符中的特殊字符串或字符串为什么我必须覆盖整个字符串,它可能是1000个字符或倍数。我所知道的在c ++运行时库中,所有函数都不支持类似的东西,例如 strchr 它会搜索所有字符串,我不希望我想要比较[]到[]的字符串的特定部分。我已经看到使用 wmemchr 解决该问题的方法,但我需要它依赖于当前选择的语言环境,如果有人知道如何做到这一点,我将不胜感激。

另外如何直接比较2个字符与区域设置?

3 个答案:

答案 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)作为第二种或第三种方法的缓冲区