#include <stdio.h>
#include <string.h>
void del(char *p1,char *p2){
int i,j;
for(i=0;i<(strlen(p2));i++){
for(j=0;j<(strlen(p1));j++){
if(p1[j]==p2[i]){
p1[j]='';
}
}
}
}
int main(){
void del(char *p1,char*p2);
char a[80],b[80];
char *p1=a;
char *p2=b;
printf("请输入一个字符串:");
gets(p1);
printf("请输入要删除的字符串:");
gets(p2);
del(p1,p2);
printf("删除后的字符串为:",p1);
return 0;
}
应如何修改????
删除字符串中的指定的子字符串
C语言中设计一个函数,可以删除一个字符串中所有指定字符
答案:3 悬赏:80 手机版
解决时间 2021-03-06 20:42
- 提问者网友:暗中人
- 2021-03-05 19:44
最佳答案
- 五星知识达人网友:一把行者刀
- 2021-03-05 20:30
修改后,删除字符:
#include <stdio.h>
#include <string.h>
void del(char *p1,char *p2)
{
int i,j,k = 0;
char t[80] = {0};
for(i=0;i<(strlen(p1));i++)
{
for(j=0;j<(strlen(p2));j++)
{
if(p1[i]==p2[j])
{
break;
}
}
if(j >= strlen(p2))
{
t[k++] = p1[i];
}
}
memset(p1,0,80);
memcpy(p1,t,k);
}
int main()
{
void del(char *p1,char*p2);
char a[80],b[80];
char *p1=a;
char *p2=b;
printf("请输入一个字符串:");
gets(p1);
printf("请输入要删除的字符串:");
gets(p2);
del(p1,p2);
printf("删除后的字符串为:%s",p1);
return 0;
}
#include <stdio.h>
#include <string.h>
void del(char *p1,char *p2)
{
int i,j,k = 0;
char t[80] = {0};
for(i=0;i<(strlen(p1));i++)
{
for(j=0;j<(strlen(p2));j++)
{
if(p1[i]==p2[j])
{
break;
}
}
if(j >= strlen(p2))
{
t[k++] = p1[i];
}
}
memset(p1,0,80);
memcpy(p1,t,k);
}
int main()
{
void del(char *p1,char*p2);
char a[80],b[80];
char *p1=a;
char *p2=b;
printf("请输入一个字符串:");
gets(p1);
printf("请输入要删除的字符串:");
gets(p2);
del(p1,p2);
printf("删除后的字符串为:%s",p1);
return 0;
}
全部回答
- 1楼网友:患得患失的劫
- 2021-03-05 23:10
'C语言中设计一个函数,可以删除一个字符串中所有指定字符'
是删除指定的'字符' 还是'字符串'?? 代码中是'字符串', 有必要先问下LZ的意图
- 2楼网友:鱼忧
- 2021-03-05 21:33
下面函数在p1中删除p2中出现的任何字符。
void delall(char *p1, char *p2)
{
char *pNext, *p;
// NULL string is ignored.
if(NULL == p1 || NULL == p2)
return;
for(pNext=p1; *pNext; pNext++){
// Find current char in p2.
for(p=p2; *p; p++){
if(*pNext == *p){ // Skip char found in p2.
break;
}
}
// Append next char to result.
*p1 = *pNext;
// Increase result point when this char not found int p2.
if(!*p)
*p1 ++;
}
*p1 = 0;
}
删除串比较麻烦,删除一个子串后可能会在原字符串中构造出一个新的子串,所以处理起来不是太简单,比如输入字符串:abcdeddefeffghijklmn,从中删除def
如果不计较效率的话重新扫描那部分回退到p1开始就行了,更清晰点。
下面函数在p1中删除p2字符串。
void del(char *p1, char *p2)
{
char *p;
int len1, len2;
// NULL string is ignored.
if(NULL == p1 || NULL == p2)
return;
len1 = strlen(p1);
len2 = strlen(p2);
// p2 is not a substring of p1.
if(len2 > len1)
return;
// Find p2 in p1.
for(p=p1; len1 >= len2; p++, len1--){
if(strncmp(p, p2, len2) == 0){
memmove(p, (p+len2), (len1-len2));
*(p+(len1-len2)) = 0; // End of string.
// Rewind pointer to string start
// (memmove may construct a new string p2 in p1).
if((p - p1) > len2){
p -= len2;
len1 += len2;
}else{
p = p1;
len1 = strlen(p1);
}
continue;
}
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯