我找不到一个能让我指定开始pos开始char或子串搜索的函数。
我有,例如:
char *c = "S1S2*S3*S4";
我想通过搜索第一个'S3
'星号然后跟随它的第二个星号来搜索“*
”,最后得到那些包围的子串“S3
”星号。
答案 0 :(得分:9)
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);
答案 1 :(得分:2)
一种解决方案是找到第一个星号的位置,然后找到第二个星号的位置。然后使用这些位置作为开始和结束位置来搜索S3
。
答案 2 :(得分:1)
答案 3 :(得分:0)
#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);
}
答案 4 :(得分:0)
您可以使用strchr()。只需保存返回的指针并将其传递给下一个调用。由于此指针指向搜索的出现,搜索将从那里开始。
答案 5 :(得分:0)
一种可能性 - 如果要对字符串使用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 ++字符串类来执行此操作会更容易。