关于寻找第n次子序列c语言

strstr是从左向右寻找,但如果我想编一个从右向左寻找第n次出现的子序列该如何实现

要从右向左寻找第n次出现的子序列,可以使用以下步骤:

  1. 使用strlen()函数获取主序列的长度。
  2. 从主序列的末尾开始循环,使用strstr()函数在主序列中查找子序列。
  3. 如果找到了子序列,计数器加1。
  4. 如果计数器等于n,返回该位置。
  5. 如果循环结束,但是没有找到第n次出现的子序列,返回NULL。

例:

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;
}