c语言——查找子串
int del_substr(char *str, const char *substr);
函数首先判断 substr
是否出现在str中,如果并未出现,函数就返回0
如果出现,函数应该把str
中该字符串后面的所有字符串赋值到该字符串位置
从而删除这个字符串,然后函数返回1。如果 substr
多次出现在str中,函数只删除第1次出现的字符串
- a.函数中不使用任何操作字符串的函数.(如:
strcpy
、strcmp
等) - b.函数中的任何地方不使用下标。
原理
利用双指针比较。
例子
char *str = "abcdefgdfpoiq";
char *sub = "df";
返回
pos = dfpoiq
代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//查找子串第一次出现的位置
char* myStrStr(const char *str, const char *substr) {
const char *mystr = str;
const char *mysub = substr;
while (*mystr != '\0') {
if (*mystr != *mysub) {
++mystr;
continue;
}
//临时指针变量
const char *temp_mystr = mystr;
const char *temp_mysub = mysub;
while (*temp_mysub != '\0') {
if (*temp_mystr != *temp_mysub) {
++mystr;//后面的字符不相等,要直接跳过,因为我们已经对比过是不相等的了,没有必要再比较一次。
break;
}
//两字符相等,两指针同时向后走
++temp_mysub;
++temp_mystr;
}
//说明匹配成功
if (*temp_mysub == '\0') {
//mystr是const char *类型,这里要强转为char *类型
return (char*) mystr;
}
}
return NULL;
}
void test() {
char *str = "abcdefg";
char *sub = "f";
char *pos = myStrStr(str, sub);
printf("pos = %s\n", pos);
}
int main() {
test();
system("pause");
return EXIT_SUCCESS;
}
运行
pos = fg