11. 暴力匹配字符串、strcspn函数删去换行符

发布于 2 天前  7 次阅读


暴力匹配找出第一个匹配的字符串的下标

int find(char* arr, char* a) {
    int len_arr = strlen(arr);
    int len_a = strlen(a);

    for (int i = 0; i <= len_arr - len_a; i++) { // 注意这里的条件
        int j;
        for (j = 0; j < len_a; j++) {
            if (arr[i + j] != a[j]) {
                break; // 如果不匹配,退出内层循环
            }
        }
        if (j == len_a) { // 如果内层循环完成,说明找到了
            return i; // 返回找到的下标
        }
    }
    return -1; // 如果没有找到,返回 -1
}

//一个细节他妈找了整节课,别随便写break了,我自己写的代码用了count计算器,一个细节是没有清空弹夹(可能有错误,count没有重置的话),第二个细节是内存循环结束后的代码,如下:

if (count == 1) {
    return i;
} else break;

他妈的多写了break,那么就不会继续找,出错了就结束了外层循环


strcspn 是 C 标准库中的一个字符串处理函数,定义在 <string.h> 头文件中

//csdn:很高兴认识你,我的p

size_t strcspn(const char *s1, const char *s2);
  • s1:要搜索的字符串
  • s2:包含要排除的字符的字符串

返回值

strcspn 返回 s1 中第一个出现的 s2 中字符的索引(不是从1开始,可以看成下标)。如果 s1 中没有任何字符出现在 s2 中,则返回 s1 的总长度

//比如,strcspn(arr, "\n"),如果用fgets输入arr这个字符串,返回的就是倒数第二个有效的下标(fgets没有舍命陪君子时)

那么arr[strcspn(arr, "\n")] = 0; // 去掉换行符

//在 C 语言中,0 (没有加引号,就是ASCII值)可以被视为 '\0',因为它们在内存中表示相同的值

届ける言葉を今は育ててる
最后更新于 2024-11-19