|
发表于 2021-5-31 13:38:03
From FishC Mobile
|
显示全部楼层
|阅读模式
25鱼币
问题描述
编写程序,输入两个字符串,从第一个字符串中删除第二个字符串,输出删除后的字符串。例如输入”abcabcd”和”bc”,则输出”aad”。用指针实现。
输入格式
输入两个字符串ch1和ch2
输出格式
输出删除ch2后的字符串ch1
样例输入
一个满足题目要求的输入范例。
例:
abcabcd
bc
样例输出
与上面的样例输入对应的输出。
例:
aad
数据规模和约定
输入数据中每一个数的范围。
输入的字符串长度小于100
这是我代码大概错误原因已经知道,希望大佬能帮忙改正并指出错误,或者大佬们重新写一个思路(最好能加上注释)
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- void del(char *q,char *qq);
- char ch1[100],ch2[100],*p,*pp;
- gets(ch1);
- gets(ch2);
- p=ch1;
- pp=ch2;
- del(p,pp);
- puts(ch1);
- return 0;
- }
- void del(char *q,char *qq)
- {
- char *s;
- for(s=q;*s!='\0';s++)
- {
- if(*s!=*qq)
- *q++=*s;
- }
- *q='\0';
- }
复制代码
在此提前感谢大佬
- #include <stdio.h>
- #include <stdlib.h>
- #define NUL 0 // '\0' == 0
- int del_substr(char *string,char const *dele_str)
- {
- char *temp;
- char *index;
- char *dele_head=dele_str; // 保存要删除的数据的头指针
- while( *string != NUL){
- if( *string== *dele_str){
- temp=index=string;//第一次相同时的字符
- // 用于定位 temp复制时会丢失 所以index 用于第二次遍历
-
- while( *dele_str != NUL && *dele_str++ == *string++)
- // 只能 dele的数据到结尾了 或 元素不相等了
- ;
-
-
- if( *dele_str == NUL){// 如果到结尾了 且保持一直相等
- while( *string != NUL) //剩余的字符
- *temp++ = *string++; //复制完成
- }
- else return 0; //如果else --> 说明不相等 返回 0
- *temp= NUL;//添加 ‘|0’
- //
- string = --index; // 将目标字符串 头指针定位到删除复制完成后 的第一个位置 继续遍历
- // -1 因为下面string++了
- dele_str = dele_head;//要删除的字符串 头指针复原
-
- }
-
- string++;
- }
- return 1; //成功返回1 失败 0
- }
- int main()
- {
- char str[]="CDCD66CD6999 ",*substr="CD";
- int res=del_substr(str,substr);
- printf("%d\n%s\n",res,str);
- return 0;
- }
复制代码
自写不易
|
|