c语言编程题
答案:3 悬赏:20 手机版
解决时间 2021-04-13 13:58
- 提问者网友:人生佛魔见
- 2021-04-12 23:57
c语言编程题
最佳答案
- 五星知识达人网友:玩家
- 2021-04-13 01:05
#include
#include
void myf_delsubstr(char *s,char *s1)
{char *p;
int n;
if((p=strstr(s,s1))==NULL)return;
n=strlen(s1);
for(;*p=*(p+n);p++);
}
int main()
{int x,i,y;
char s[]="他是我的大学老师",s1[]="我的";
myf_delsubstr(s,s1);
printf("%s
",s);
return 0;
}
全部回答
- 1楼网友:神鬼未生
- 2021-04-13 02:49
这代码能写 不算难
- 2楼网友:走死在岁月里
- 2021-04-13 01:28
#include
char *myf_delsubstr(char *str_all, char *str_drop)
{
char *all = str_all; //临时指针 指向全字串
char *drop = str_drop; //临时指针 指向待删除字串
char *tmp = NULL; //临时指针 后面处理字串时使用
static char out[1024] = {0}; //静态字串 作为返回值
char *u = out; //临时指针 指向返回的字串
int drop_len = 0; //待删除字串的长度
//获取待删除字串的长度
while ('' != *drop)
{
drop++;
drop_len++;
}
//在获取长度时drop这个指针的指向已被改变 重新赋值
drop = str_drop;
while ('' != *all)//直到全字串结尾
{
if (*all == *drop)//发现第一个和待删除字串的第一个字符相等 准备进入二层循环排除或证明怀疑
{
tmp = all;//临时指针指向当前匹配的字串的首部
while ('' != *drop)//直到待删除字段结尾
{
tmp++;//每次循环临时全字串和drop字串要往后偏移一位
drop++;//每次循环临时全字串和drop字串要往后偏移一位
if (*tmp != *drop)//一旦发现其中一个字符不相等 排除怀疑
{
break;
}
}
if ('' != *drop)//如果还未检查到字串尾就出来了肯定是排除了怀疑
{
*u = *all;//既然排除怀疑那就把当前字符赋值到带返回的字串out中
u++;//赋值后要往后偏移
drop = str_drop;
}
else//证实了怀疑
{
all += drop_len;//全字串越过待删除的字段长度
drop = str_drop;//指针的指向已被改变 重新赋值
continue;//全字串中可能不止出现一次待删除的字串 继续全字串的检查
}
}
else
{
*u = *all;//既然不是待删除字符那就把当前字符赋值到带返回的字串out中
u++;//赋值后要往后偏移
}
all++;//既然是循环整个全字串检查 检查完一个字符后指针要往后偏移一位
}
return out;//u只是指向out这个字串的临时指针 我们返回的还是out本体
}
int main(int argc, char *argv[])
{
char aa[1024] = {0};
char bb[512] = {0};
printf("输入一个字串: ");
scanf("%s", aa);
printf("输入需要删除的字串: ");
scanf("%s", bb);
char *kk = myf_delsubstr(aa, bb);
printf("处理后的字串: %s ", kk);
return 0;
}
输入一个字串:
我觉得你是不可能爱上我的因为我是一个男孩子
输入需要删除的字串:
我
处理后的字串:
觉得你是不可能爱上的因为是一个男孩子
char *myf_delsubstr(char *str_all, char *str_drop)
{
char *all = str_all; //临时指针 指向全字串
char *drop = str_drop; //临时指针 指向待删除字串
char *tmp = NULL; //临时指针 后面处理字串时使用
static char out[1024] = {0}; //静态字串 作为返回值
char *u = out; //临时指针 指向返回的字串
int drop_len = 0; //待删除字串的长度
//获取待删除字串的长度
while ('' != *drop)
{
drop++;
drop_len++;
}
//在获取长度时drop这个指针的指向已被改变 重新赋值
drop = str_drop;
while ('' != *all)//直到全字串结尾
{
if (*all == *drop)//发现第一个和待删除字串的第一个字符相等 准备进入二层循环排除或证明怀疑
{
tmp = all;//临时指针指向当前匹配的字串的首部
while ('' != *drop)//直到待删除字段结尾
{
tmp++;//每次循环临时全字串和drop字串要往后偏移一位
drop++;//每次循环临时全字串和drop字串要往后偏移一位
if (*tmp != *drop)//一旦发现其中一个字符不相等 排除怀疑
{
break;
}
}
if ('' != *drop)//如果还未检查到字串尾就出来了肯定是排除了怀疑
{
*u = *all;//既然排除怀疑那就把当前字符赋值到带返回的字串out中
u++;//赋值后要往后偏移
drop = str_drop;
}
else//证实了怀疑
{
all += drop_len;//全字串越过待删除的字段长度
drop = str_drop;//指针的指向已被改变 重新赋值
continue;//全字串中可能不止出现一次待删除的字串 继续全字串的检查
}
}
else
{
*u = *all;//既然不是待删除字符那就把当前字符赋值到带返回的字串out中
u++;//赋值后要往后偏移
}
all++;//既然是循环整个全字串检查 检查完一个字符后指针要往后偏移一位
}
return out;//u只是指向out这个字串的临时指针 我们返回的还是out本体
}
int main(int argc, char *argv[])
{
char aa[1024] = {0};
char bb[512] = {0};
printf("输入一个字串: ");
scanf("%s", aa);
printf("输入需要删除的字串: ");
scanf("%s", bb);
char *kk = myf_delsubstr(aa, bb);
printf("处理后的字串: %s ", kk);
return 0;
}
输入一个字串:
我觉得你是不可能爱上我的因为我是一个男孩子
输入需要删除的字串:
我
处理后的字串:
觉得你是不可能爱上的因为是一个男孩子
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯