删除字符串的一部分
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;
}
相关文章推荐
- UGUI实现的变速摇杆 (转)
- AndroidStudio错误总结及解决(待续)
- Node.js机制及原理理解初步
- selector android:state_enabled或者state_pressed设置无效
- android广播(内部类)使用
- 微信支付遇到的坑
- Ansible hostvars
- zoj1049
- 2016.05.10回顾
- 合格证打印自动换行问题解决方案
- 如何 获取百度云 的迅雷下载链接
- OC数组中的深拷贝
- vim 学习记录2
- xcode code snippets (实用)
- xcode code snippets (实用)
- 利用人性的弱点做管理,会用就有奇效!
- Letter Combinations of a Phone Number
- ubuntu安装雅黑字体解决chrome浏览器字体发虚问题
- Updates were rejected because the tip of your current branch is behind
- 如何在不联网的情况下ping通主机与虚拟机