• 全部
  • 问答

一个普通的问题,关于指针和数组的

flice 2004-11-19 12:37:57
我先给出描述:
char str[]={"a1bb1ccc1dddd1eeeee1"};

用一个函数search('1',2)我输入,那么就输出'bb',也就是'1'出现的第一次和第二次间的字符串,

#include <stdio.h>
#include <stdlib.h>

void search(char tc,int t)
{
char str[]={"a1bb1ccc1dddd1"};
char *pF,*pL;
int i=0;
int j=0;
pF=str;
pL=str;
while(str[i]!='\0')
{
if(str[i]!=tc)
{
pL++;
}
else
{
j++;
if(j==t)
{
pL='\0';
}
else
{
pF=(pL+1);
break;
}
}
}

}

void main()
{
search('1',3);
}

谢谢解答先~~!
...全文
127 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
flice 2004-11-19
这个可以吧 ~~?
不好意思,刚才贴错了
以下面的为准

#include <stdio.h>
#include <stdlib.h>

void search(char tc,int t)
{
char str[]={"a1bb1ccc1dddd1"};
char *pF,*pL;
int i=0;
int j=0;
pF=str;
pL=str;
while(str[i]!='\0')
{
if(str[i]!=tc)
{
pL++;
}
else
{
j++;
if(j==t)
{
pL='\0';
break;
}
else
{
pF=(pL+1);

}
}
}

}

void main()
{
search('1',3);
}
回复
Flood1984 2004-11-19
char str[]={"a1bb1ccc1dddd1eeeee1"}; //这种定义能编译通过?
回复
flice 2004-11-19
嘿嘿,我想我已经解决了,再次感谢各位!

///////////////////////////////////////////////////

#include <stdio.h>

void search(char tc,int t)
{
char str[20]="a1bb1ccc1dddd1";
char *pF,*pL;
int i=0;
int j=0;
pF=str;
pL=str;
while(str[i]!='\0')
{
if(*pL!=tc)
{
pL++;
}
else
{
j++;
if(j==t)
{
*pL='\0';
while(*pF!='\0')
{
printf("%c ",*pF++);
}
break;
}
else
{
pF=(pL+1);
pL++;
}
}
i++;
}
}

void main()
{
search('1',3);
}

////////////////////////////////////////////////////////
回复
spider_xm 2004-11-19
不考虑这些异常的话,改成那样应该就可以了,if(j==t)
{
pL ++; //把这句去掉
*pL='\0';
break;
}
刚刚忘了写
回复
flice 2004-11-19
多谢楼上这位仁兄,这些情况先不予考虑的

其实就是指针和数组的问题(我用的不是很熟悉,所以经常出错)

继续关注.....
回复
spider_xm 2004-11-19
如果t<=1或者t>=4时输出什么?这些都不考虑的话,
else if (j == 1)
{
pF=(pL+1);
}
改为
else
{
pF = ( pL+1 );
pL++;
}
试试看吧。
回复
flice 2004-11-19
多谢各位
但是好像都没有达到我要的结果啊
////////////////////////////////////////////////////////////////
我先给出描述:
char str[]={"a1bb1ccc1dddd1eeeee1"};

用一个函数search('1',2)我输入,那么就输出'bb',也就是'1'出现的第一次和第二次间的字符串
////////////////////////////////////////////////////////////////////////////////////

search('1',1) 为a
search('1',2) 为bb
search('1',3) 为ccc

其实我现在关键不是逻辑关系,先看看我的思路(刚才上面我贴的代码可能有些仓卒,不好意思~)

pFirst即pF,pLast即pL;
pF.pL均指向str;
pL向后移动,遇到'1',判断tc,不符就将pFirst移动到pLast+1处,tc符合条件就将pL置结束符 ,然后取*pF

////////////////////////////////////////////////////////
回复
pomelowu 2004-11-19
char str[]={"a1bb1ccc1dddd1"};
void search(char tc,int t)
{
char *pF,*pL;
int i=0;
int j=0;
pF=str;
pL=str;
while(str[i] != '\0')
{
if(str[i] != tc)
{
pL++;
}
else
{
j++;
if(j==t)
{
pL ++;
*pL='\0';
break;
}
else if (j == 1)
{
pF=(pL+1);
}
}
i++;
}
cout << pF << endl;
}
回复
spider_xm 2004-11-19
你的输出语句呢?
回复
zwzzj 2004-11-19
你的程序是个死循环.
while(str[i]!='\0') 这句你的i始终没变.
我把程序修改了下.



#include <stdio.h>
#include <stdlib.h>

void search(char tc,int t)
{
char str[]={"albblccclddddll"};
char *pF,*pL;
int j=0;

pF=str;
while(*pF!='\0' && *pF!=tc) pF++;

if(*pF==tc && *pF!='0')
pL=pF;
while(*pL!='\0'){

if(*pL==tc)
++j;
if(j==t)
break;

pL++;
}

if(pL-pF>0)
for(pF++;pF!=pL;pF++)
printf("%c",*pF);
else
printf("Cannot find!\n");

return ;

}

void main()
{
search('l',3);
return ;
}
回复
hunter606 2004-11-19
在while語句後,將pF輸出
回复
hunter606 2004-11-19
while(str[i]!='\0')
{
if(str[i]!=tc)
{
pL++;
}
else
{
j++;
if(j==t)
{
pL='\0';
break;
}
else if(j == 1) //此處增加修改
{
pF=(pL+1);
}
}
i++;
}
回复
pomelowu 2004-11-19
啊,不对,你的函数把str最后一个tc后的字符去掉了,但是没有截断前面的字符,也没有返回,函数结束以后什么结果也没有,查了白查
回复
pomelowu 2004-11-19
而且你这个函数执行了什么结果都没有,连返回信息都没有,查了白查
回复
flice 2004-11-19
i++忘了,不好意思,有点仓促~,
while(str[i]!='\0')
{
if(str[i]!=tc)
{
pL++;
}
else
{
j++;
if(j==t)
{
pL='\0';
break;
}
else
{
pF=(pL+1);

}
}
}
i++;
}
回复
pomelowu 2004-11-19
你的i没有自加,会死循环
回复
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-11-19 12:37
社区公告
暂无公告