一道简单的利用指针的题目
问题描述编写程序,输入两个字符串,从第一个字符串中删除第二个字符串,输出删除后的字符串。例如输入”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,ch2,*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;
}
自写不易{:5_104:} 万千只cnm 发表于 2021-5-31 14:40
自写不易
temp复制时会丢失 所以index 用于第二次遍历
为啥会丢失?(我真的挺菜的) 魔轩 发表于 2021-5-31 15:43
temp复制时会丢失 所以index 用于第二次遍历
为啥会丢失?(我真的挺菜的)
*temp++ = *string++; //复制完成
temp和 string 都向后指了
回不去了
相当于用index保存 temp 万千只cnm 发表于 2021-5-31 16:09
temp和 string 都向后指了
回不去了
相当于用index保存 temp
谢谢 魔轩 发表于 2021-5-31 16:56
谢谢
来个最佳{:5_102:} 万千只cnm 发表于 2021-5-31 17:00
来个最佳
给了{:10_256:} 魔轩 发表于 2021-5-31 17:38
给了
{:5_109:} 万千只cnm 发表于 2021-5-31 18:04
你试试输入是abdefabcefgabcdef和abcd,这个貌似不行 魔轩 发表于 2021-5-31 22:36
你试试输入是abdefabcefgabcdef和abcd,这个貌似不行
else return 0;
哦哦 这里返回0退出了
页:
[1]