//01 请编写函数。删除字符串的一部分。函数原型如下:
//
//int del_substr(char *str, const char *substr);
//函数首先判断substr是否出现在str中,如果并未出现,函数就返回0;如果出现,函数应该把str中该字符串后面的所有字符串赋值到该字符串位置,
//从而删除这个字符串,然后函数返回1。如果substr多次出现在str中,函数只删除第1次出现的字符串。
//
//a.函数中不使用任何操作字符串的函数.(如:strcpy、strcmp等)
#include<stdio.h>
#include<stdlib.h>
int mystrlen(char *p)
{
int length = 0;
while (*p != '\0')
{
length++;
p++;
}
return length;
}
//下标法实现strstr函数
char *mystrstr(const char * Moth_Str, const char * Sub_Str){
if (Moth_Str == NULL || Sub_Str == NULL)
{
return NULL;
}
char *pos = NULL;
int alllength = mystrlen(Moth_Str);
int sublength = mystrlen(Sub_Str);
for (int i = 0; i < alllength - sublength; i++)
{
int flag = 1;
for (int j = 0; j < sublength; j++)
{
if (Sub_Str[j] != Moth_Str[i + j])
{
flag = 0;
break;
}
}
if (flag)
{
pos =Moth_Str + i;
return pos;
}
}
return pos;
}
char *mystrcpy(char *p1, const char *p2)
{
if (p1 == NULL || p2 == NULL)
{
return NULL;
}
char *p = p1;
while (*p1++ = *p2++);
return p;
}
int del_substr(char *str, const char *substr)
{
if (str == NULL || substr == NULL)
{
return NULL;
}
char *pos = NULL;
if ((pos = mystrstr(str, substr)) == NULL)
{
return 0;
}
mystrcpy(pos, pos + mystrlen(substr), mystrlen(pos + mystrlen(substr)) + 1);
return 1;
}
void main()
{
char allstr[100] = "123456789 hello china hello c hello cpp hello tianchao";
char str[10] = "hello";
del_substr(allstr, str);
printf("%s", allstr);
system("pause");
}