Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152390
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 908
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-03 11:03
个人简介

学习linux

文章分类
文章存档

2014年(7)

2013年(33)

我的朋友

分类: C/C++

2014-03-29 23:42:07

在《编程之美》上看到的一道题,3.1节。

解法一有点问题,下面是书上写的:

char src[] = "AABBCD";

char des[] = "CDAA";

int len = strlen(src);

for(int i=0;i

{

char tmp = src[0];

for(int j=0;j

{

src[j] = src[j+1];

}

src[len-1] = tmp;


if(strstr(src,des) == 0)

{

return true;

}

}

return  false;


错误一:应该是if(strstr(src,des) != 0)

错误二:应该在比较后再循环移位,比如“ABCD”和“ABC”则在移动到“DABC”才会找到


解法二更加好一些,这也告诉我们有时候要转换一下问题

int main(int argc,char **argv)
{
int len;
char *src;
char *des;


if(argc != 3) {
printf("para must be 3 \n");
return -1;
}

len = strlen(argv[1]);
src = malloc(2*sizeof(argv[1]));
memcpy(src,argv[1],len);
src = strcat(src,argv[1]);
des = argv[2];
len = strlen(src);

printf("string is %s and %s and %d\n",src,des,len);


if(strstr(src,des) != 0) {
printf("find it %s and %s\n",src,des);
return 0;
}


printf("can't find it\n");
return -1;
}

阅读(2394) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~