题目要求:
请编写一个函数,删除一个字符串的一部分。函数的原型如下:
int del_substr(char *str, char const *substr);
函数首先应该判断substr是否出现在str中,如果它并未出现,函数就返回0;如果出现,函数应该把str中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第一次出现的子串。函数的第2个参数绝不会被修改。
代码如下:
方法一:
int del_substr(char *str, char const *substr)
{
int flag = 0; //判断是否相等
char *stringStr = str;
char *stringResult = NULL;
char const *stringSubstr = substr;
while (*stringStr != '\0')
{
if (*stringStr == *stringSubstr)
{
flag++;
stringResult = stringStr;
*stringStr++;
*stringSubstr++;
}
else
{
stringStr++;
stringSubstr = substr;
}
if (*(stringSubstr) == '\0')
{
while (*stringResult)
{
*(stringResult - flag) = *(++stringResult);
}
return 1;
}
}
return 0;
}
测试代码:
#include <stdio.h>
int main()
{
char s1[] = "ABCDEF";
char s2[] = "BC";
int p = 0;
p = del_substr(s1, s2);
printf("%d\n%s\n", p,s1);
return 0;
}
方法二:
int del_substr(char *str, char const *substr)
{
char *stringStr = NULL;
char *stringResult = NULL;
char const *stringSubstr = NULL;
int flag = 0;
int flagTrue = 0;//判断是否相等过
if (str == NULL || substr == NULL)
{
return 0;
}
stringStr = str;
stringSubstr = substr;
while (*stringStr != '\0')
{
while (*stringSubstr != '\0')
{
if (*stringStr == *stringSubstr)
{
stringResult = stringStr;
flag++;
flagTrue = 1;
*stringStr++;
*stringSubstr++;
continue;
}
else
{
flag = 0;
break;
}
}
if (*(stringSubstr) == '\0')
{
while (*stringResult)
{
*(stringResult - flag) = *(++stringResult);
}
return 1;
}
if (flagTrue == 1)
{
break;
}
else
{
stringStr++;
}
}
return flag;
}
测试代码:
#include <stdio.h>
int main()
{
char s1[] = "ABCDEF";
char s2[] = "BC";
int p;
p = del_substr(s1, s2);
printf("%d\n%s\n", p, s1);
return 0;
}
输出结果:
1
ADEF
结束!