我找不到一個函數,它會讓我指定開始字符或子字符串搜索的開始位置。找到一個字符或子字符串與指定開始pos
我有,例如:
char *c = "S1S2*S3*S4";
我想搜索「S3
」通過搜索第一「*
」星號,然後將第二個星號以下,並最終獲得子「S3
」封閉由那些星號。
我找不到一個函數,它會讓我指定開始字符或子字符串搜索的開始位置。找到一個字符或子字符串與指定開始pos
我有,例如:
char *c = "S1S2*S3*S4";
我想搜索「S3
」通過搜索第一「*
」星號,然後將第二個星號以下,並最終獲得子「S3
」封閉由那些星號。
一個解決辦法是找到第一個星號的位置,那麼第二個星號的位置。然後使用這些位置作爲開始和結束位置來搜索S3
。
string類有一個大型的find
函數系列,它將索引作爲第二個參數。 find('*', index)
的重複應用應該會爲您提供您所需的。
std::string s(c);
std::string::size_type star1 = s.find('*');
std::string::size_type star2 = s.find('*', star1 + 1);
std::string last_part = s.substr(star2 + 1);
#include <string>
std::string between_asterisks(const std::string& s) {
std::string::size_type ast1 = s.find('*');
if (ast1 == std::string::npos) {
throw some_exception();
}
std::string::size_type sub_start = ast1+1;
std::string::size_type ast2 = s.find('*', sub_start);
if (ast2 == std::string::npos) {
throw some_exception();
}
return s.substr(sub_start, ast2-sub_start);
}
您可以使用strchr()。只需保存返回的指針並將其傳遞給下一個調用。由於該指針指向搜索的發生,搜索將從那裏開始。
以及一種可能性 - 如果你是使用C風格的char *數組字符串 - 是使用,和strchr搜索星號的出現,例如,(並沒有錯誤檢查,記)
char c []= "S1S2*S3*S4";
char* first = strchr(c,'*');
if (first) {
char* start = ++first;
char* nextast = strchr(start,'*');
char* s3str = new char[nextast-start+1];
strncpy(s3str,start,nextast-start);
s3str[next-start] = '\0';
}
但使用C++字符串類來執行此操作會更容易。
對`std :: string :: npos`檢查`star1`和`star2`是適當的。除此之外,我會推薦這個C++解決方案。 – 2010-11-24 16:09:25