10-2. 删除字符串中的子串(20)
2015-08-11 20:22
435 查看
题目:输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male
-------------------------------------------------------------------------------------
C语言做这个题时,大家想到的是用字符串的库函数,我们啥也不用,全自己写函数解答,也是一种练习。
#include <stdio.h>
int StrLength(char *p) //用于计算一个字符串长度的函数
{
int i=0;
while(p[i]!='\0')
{
i++;
}
return i;
}
int StrSearch(char *p,char *q) // 计算字符串P里第一个含有字符串q位置数的函数
{
int i,j,real=1,flag=0;
int m=StrLength(p);
int n=StrLength(q);
for(i=0;i<m-n+1;i++)
{
if(p[i]==q[0])
{
for(j=1;j<n;j++)
{
if(q[j]==p[i+j])
real++;
}
if(real==n)
return i; //如果字符串P里含有字符串q,则返回第一个q前面的字符数
else
real=1;
}
}
return -1; ////如果字符串p里不含有字符串q,则返回-1
}
void StrDelete(char *p,char *q) //把字符串p中的字符串q全部删除的函数
{
int x,i,j,m,n;
m=StrLength(p);
n=StrLength(q);
x=StrSearch(p,q);
while(x!=-1)
{
for(i=x;i<m-n+1;i++)
{
p[i]=p[i+n];
}
m=StrLength(p);
x=StrSearch(p,q);
}
}
void GetStr(char *p) //获取字符串的函数
{
int i=0;
char c;
while(1)
{
scanf("%c",&c);
if(c=='\n')
{
p[i]='\0';
break;
}
else
p[i]=c;
i++;
}
}
int main()
{
char str01[81],str02[81];
GetStr(str01);
GetStr(str02);
StrDelete(str01,str02);
printf("%s\n",str01);
return 0;
}
相关文章推荐
- 数据库链接字符串查询网站
- 动易2006序列号破解算法公布
- Flex字符串比较 还有Flex字符串操作
- Ruby实现的矩阵连乘算法
- Ruby中创建字符串的一些技巧小结
- ASP下经常用的字符串等函数参考资料
- 将字符串小写转大写并延时输出的批处理代码
- 将字符串转换成System.Drawing.Color类型的方法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- Lua源码中字符串类型的实现
- Lua性能优化技巧(四):关于字符串
- 字符串聚合函数(去除重复值)
- Ruby中的字符串编写示例
- 总结的5个C#字符串操作方法分享
- sqlserver中求字符串中汉字的个数的sql语句
- sql server字符串非空判断实现方法
- VBS的字符串及日期操作相关函数
- C#实现将千分位字符串转换成数字的方法
- jquery 删除字符串最后一个字符的方法解析