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

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);
}

谢谢解答先~~!
...全文
148 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
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没有自加,会死循环

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧