<多次搜索>

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

字符串的题目,温习了一下strstr库函数的使用。

描述

C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

声明

下面是 strstr() 函数的声明。

char *strstr(const char *haystack, const char *needle)

参数

  • haystack -- 要被检索的 C 字符串。
  • needle -- 在 haystack 字符串内要搜索的小字符串。

返回值

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

int** multiSearch(char* big, char** smalls, int smallsSize, int* returnSize, int** returnColumnSizes)
{
    int len = strlen(big);
    int **ans = (int **)malloc(sizeof(int *) * smallsSize);
    for (int i = 0; i < smallsSize; i++) {
        ans[i] = (int *)malloc(sizeof(int) * len);
    }
    *returnColumnSizes = (int*)malloc(sizeof(int) * smallsSize);

    for (int i = 0; i < smallsSize; i++) {
        int cnt = 0;
        if (strcmp(smalls[i], "") != 0) {
            char *p = strstr(big, smalls[i]); // 寻找字符串首次出现的位置
            while (p != NULL) {
                ans[i][cnt++] = p - big;
                p = p + 1;    // 指针向右移动一位,避免重复
                p = strstr(p, smalls[i]); // 寻找字符串出现的另外的位置
            }
        }
        (*returnColumnSizes)[i] = cnt;
    }

    *returnSize = smallsSize;
    return ans;
}

您可以使用 JavaScript 来实现保存多次选中状态的功能,同时在多次搜索时保持选中状态不变。具体实现方法如下: 1. 创建一个空数组来保存选中行的数据,例如 `selectedRows`。 2. 当用户选中某一行时,您可以通过修改该行的 class 属性来实现选中状态的变化,同时将该行的数据保存到 `selectedRows` 数组中。 3. 当用户进行搜索时,您可以遍历保存选中行数据的 `selectedRows` 数组,并将匹配搜索条件的行的 class 属性设置为 "selected",其他行的 class 属性设置为 "",这样就可以保持选中状态不变。 4. 当用户取消选中某一行时,您可以从 `selectedRows` 数组中移除该行的数据。 5. 注意,在每次搜索时,您需要先将之前保存选中行数据的 `selectedRows` 数组清空,然后再根据搜索条件重新保存选中行的数据。 示例代码如下: ``` // 创建一个空数组来保存选中行的数据 let selectedRows = []; // 选中某一行时的处理函数 function onSelectRow(row) { // 修改该行的 class 属性来实现选中状态的变化 row.classList.add('selected'); // 将该行的数据保存到 selectedRows 数组中 selectedRows.push(row); } // 取消选中某一行时的处理函数 function onDeselectRow(row) { // 修改该行的 class 属性来实现取消选中状态的变化 row.classList.remove('selected'); // 从 selectedRows 数组中移除该行的数据 selectedRows = selectedRows.filter(selectedRow => selectedRow !== row); } // 搜索时的处理函数 function onSearch(keyword) { // 先将之前保存选中行数据的 selectedRows 数组清空 selectedRows = []; // 遍历所有行,根据搜索条件保存选中行的数据,并修改其 class 属性 const rows = document.querySelectorAll('tr'); rows.forEach(row => { const isMatched = row.innerText.includes(keyword); if (isMatched) { // 如果该行匹配搜索条件,则将其 class 属性设置为 "selected" row.classList.add('selected'); // 并将该行的数据保存到 selectedRows 数组中 selectedRows.push(row); } else { // 如果该行不匹配搜索条件,则将其 class 属性设置为 "" row.classList.remove('selected'); } }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值