主题:删去子字符串
wtz110
[专家分:0] 发布于 2011-10-10 22:13:00
输入abc1abc2abc3输出123;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void del(char *str,char *sub)
{int i=0,len1,len2,j=0;
char u[80];
len1=strlen(str);
len2=strlen(sub);
while(i<len1&&*str!='\0')
{if(strncmp(str+i,sub,len2)==0)
i+=len2;
else
{u[j]=str[i];
i++;j++;}
}
u[j]='\0';
str=u;
}
int main()
{char s1[80]="abc1abc2abc3",s2[80]="abc";
del(s1,s2);
printf("%s\n",s1);
system("pause");
return 0;}
为什么不能用上面的代码实现
回复列表 (共7个回复)
沙发
bruceteen [专家分:42660] 发布于 2011-10-11 08:22:00
不排版,缩成一团像坨大便一样
即使你想用来恶心别人,难道自己看着就不难受吗
板凳
cgl_lgs [专家分:21040] 发布于 2011-10-11 11:08:00
为何不用strstr呢?
3 楼
wtz110 [专家分:0] 发布于 2011-10-11 20:39:00
不好意思我是初学者不会排版
4 楼
windy0will [专家分:2300] 发布于 2011-10-11 22:33:00
尽量一行只写一个语句,各语句块间保持一定的缩进。有时候看那些排版排的好的代码,不管能不能看得懂,也会让人感觉很舒服。 多看看别人的代码,慢慢的就会了的。
5 楼
cgl_lgs [专家分:21040] 发布于 2011-10-12 10:08:00
初学就不会排版那是借口,你一定要严格要求自己,先学会排版(代码缩进规则),其他再说。
否则你只能是害自己。
6 楼
wtz110 [专家分:0] 发布于 2011-10-12 23:31:00
谢谢两位专家的指点。
7 楼
justem [专家分:0] 发布于 2011-10-13 19:25:00
str=u;
}
首先这一行就是完全错误的,u是局部变量,直接赋给str是个什么意思,
字符串应该是不会支持这种直接赋值运算的。
给你个能实现功能的del
[code=c]
void del(char *str,char *sub)
{
int i=0,len1,len2,j=0;
char u[80];
int pos1 = 0;
int pos2 = 0;
int len = 0;
memset(u, 0x00, sizeof(u));
len1 = strlen(str);
len2 = strlen(sub);
while((i < len1) && (*str!='\0'))
{
if(0 == strncmp(str + i, sub, len2))
{
//printf("find %s, i : %d, delete\n", sub, i);
pos1 = i;
i ++;
while((i < len1) && (*str!='\0'))
{
if(0 == strncmp(str + i, sub, len2))
{
//printf("find next %s, i = %d\n", sub, i);
pos2 = i;
break;
}
else
{
i++;
}
}
if (i == len1)
{
//printf("case1\n");
strcpy(&u[j], &str[pos1 + len2]);
}
else
{
len = pos2 - pos1 - len2;
//printf("case2, len %d\n", len);
strncpy(&u[j], &str[pos1 + len2], len);
}
j += len;
len = 0;
pos1 = 0;
pos2 = 0;
}
else
{
i++;
j++;
}
}
//printf("u:%s\n", u);
strcpy(str, u);
}
[/code]
另外,代码缩进真的很重要,要不然真看不懂啊
我来回复