C语言删除一个字符串的一部分

来源:互联网 发布:行政转行会计 知乎 编辑:程序博客网 时间:2024/06/06 02:57

//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");
}
0 0
原创粉丝点击