2013-10-15 54 views
0

在C++中如何搜索距离的startIndex开始,之后的字符计数的一些结尾的字符串的一部分。在某些情况下,我只需要在前5个字符中搜索一个特殊的字符或字符串,为什么我必须从整个字符串中取出它可能是1000个字符或多个字符。我知道在C++运行时库什么,所有的功能都不支持类似的东西,例如,和strchr它会搜索所有的字符串,我不想,我想比较从字符串的特定部分[] 至 []。我已经看到了使用wmemchr该问题的解决方案,但我需要它依赖于当前所选择的场所,如果有人知道如何做到这一点,我会很感激。如何搜索字符串的一部分,不是全部

怎么也比较直接有关的区域只有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; 
} 

非营利组织= -1

并指定开始指数通至(缓冲液+的startIndex)作为缓冲到第二或第三方法

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个字符?

我不确定你的意思。你问如何直接比较两个字符?如果是这样,你可以像任何其他值一样比较。 如果(STR1 [N] == STR2 [N]){...做些什么...}

+0

感谢您的回答,但我认为这不是一个很好的做法来改变一个数据的内容只是一个搜索,如果另一个线程同时要求字符串或其长度?这会造成问题。 – ahmedsafan86

0

您可以使用std::substr来限制您的搜索区域:

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

感谢您的回答,性能对我来说是一个问题,substr正在返回一部分字符串的新副本,我不需要为了搜索而进行复制。 – ahmedsafan86

相关问题