暴力匹配找出第一个匹配的字符串的下标
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'
,因为它们在内存中表示相同的值
Comments NOTHING