strstr是从左向右寻找,但如果我想编一个从右向左寻找第n次出现的子序列该如何实现
要从右向左寻找第n次出现的子序列,可以使用以下步骤:
例:
char *find_nth_substring(char *main, char *sub, int n) {
int main_len = strlen(main);
int sub_len = strlen(sub);
int count = 0;
for (int i = main_len - 1; i >= 0; i--) {
char *p = strstr(main + i, sub);
if (p != NULL) {
count++;
if (count == n) {
return p;
}
}
}
return NULL;
}
C++简化
int find_nth_substring(string main, string sub, int n) {
int pos = -1;
for (int i = 0; i < n; i++) {
pos = main.rfind(sub, pos);
if (pos == string::npos) return -1;
}
return pos;
}