您的位置:首页 > 其它

删除字符串的一部分

2016-05-11 09:32 501 查看
《C和指针》第6章编程练习:

请编写一个函数,删除一个字符串的一部分,函数的原型如下:
int del_substr(char *str,char const *substr )
函数首先应该判断substr是否出现在str中,如果它并未出现,函数就返回0;如果出现,函数应该把str 中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第1次出现的子串,函数的第二个参数绝不被修改。
要求:1不能使用任何操纵字符串的库函数
2  不能使用下标

后面有源码及注释

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int del_substr(char *str,char const *substr);//函数声明

int main()

{

int ret = 0;

char str[20] ;

char substr[20] ;

printf("please input str substr:\n");

scanf("%s%*c",str);

scanf("%s",substr);

printf("str:%s,substr:%s\n",str,substr);

ret = del_substr(str,substr);

printf("the change str:%s\n",str);

printf("%d\n",ret);

return 0;

}

/*

**完成自己的前count个字符比较函数,相同返回0

*/

int my_strncmp(const char *s1,const char *s2,int count)

{

const char *c1 = s1;

const char *c2 = s2;

while(--count&&(*c1 == *c2))

{

c1 ++;

c2 ++;

}

return *c1 - *c2;

}

/*

**完成自己的检测字符串长度函数,返回字符串长度

*/

int my_strlen(const char *str)

{

const char *s1 = str;

for(s1 = str;*s1 != '\0';s1++)

{

;

}

return s1 - str;

}

/*

**删除字符串函数,成功返回1,str中删除第一个出现的substr;失败返回0,str不变

*/

int del_substr(char *str,char const *substr)

{

int flag = 0;//控制只删除一次的变量

char *ptr = str;

char *src = str;

int len = my_strlen(substr);

while(*src != '\0')

{

if(flag == 0&&my_strncmp(src,substr,len) == 0)

{

src = src + len;//匹配成功,src的指向后移len

flag = 1;

}

*ptr++ = *src++;//将src指向的字符赋给ptr指向的字符

}

*ptr = '\0';

str = ptr;//将修改好的字符串赋给str

if(flag == 1)//如果字符串被改动过一次,返回1

{

return 1;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: