2013-10-15 86 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

相關問題