一個刪除子字符串的程序,沒有使用C的相關字符串庫函數:
#include <stdio.h>
int del_substr(char *str,char const *substr);
int my_strlen(char const *str);
int main(void)
{
char str[] = "abcdefgh";
char *substr1 = "efg";
char *substr2 = "fgr";
printf("%d\t%s\n",del_substr(str,substr1),str);
printf("%d\t%s\n",del_substr(str,substr2),str);
return 0;
}
/**
** str -- 字符串
** substr -- 子字符串
**www.bianceng.cn整理
** 若成功找到子字符串並刪除之,提示返回1,若沒找到則返回0
**/
int del_substr(char *str,char const *substr)
{
int i = 0;
char *temp_str = str;
char const *temp_substr = substr;
int sub_len = my_strlen(substr);
while(1)
{
if(*temp_str == *temp_substr)
{
temp_substr++;
if(*temp_substr == '\0')
{
break;
}
}
else
{
temp_substr = substr;
}
if(*temp_str == '\0')
{
return 0;
}
temp_str++;
}
char *preDel = temp_str - (sub_len - 1);
while(*(preDel + (i+sub_len)) != '\0')
{
*(preDel + i) = *(preDel + (i+sub_len));
i++;
}
*(preDel + i) = '\0';
return 1;
}
int my_strlen(char const *str)
{
int len = 0;
while( *str++ != '\0')
{
len++;
}
return len;
}