帮我解释一下这个c++题,谢谢了

【程序改错】--------------------------------------------------------题目:给定程序中函数fun的功能是:求出在字符... 【程序改错】
--------------------------------------------------------
题目:给定程序中函数fun的功能是:求出在字符串中最后一次
出现的子字符串的地址,通过函数值返回,在主函数中输
出从此地址开始的字符串;若未找到,则函数值为NULL。
例如,当字符串中的内容为:"abcdabfabcdx",
t中的内容为:"ab"时,输出结果应是:abcdx。
当字符串中的内容为:"abcdabfabcdx",t中的
内容为:"abd"时,则程序输出未找到信息:not found!。
--------------------------------------------------------
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/

#include <iostream.h>
#include <string.h> string是什么意思
char * fun (char *s, char *t ) char定义的是什么来着?
{
char *p , *r, *a;
/**********FOUND**********/
a == NULL; null这里是什么,就是个量么
while ( *s )
{ p = s; r = t;
while ( *r )
/**********FOUND**********/
if ( r == p ) { r++; p++; }
else break;
/**********FOUND**********/
if ( *r ='\0' ) a = s;
s++;
}
return a ; 返回a返回到哪里
}

void main()
{
char s[100], t[100], *p;
cout<<"\nPlease enter string S :";
cin>>s;
cout<<"\nPlease enter substring t :";
cin>>t;
p = fun( s, t );
if ( p ) cout<<"\nThe result is : "<<p<<endl;
else cout<<"\nNot found !"<<endl;
}

答案:
1). a = NULL;
2). if ( *r == *p ) { r++; p++; }
3). if ( *r == '\0' ) a = s;
最重要的,我不太明白,题中所要求的函数功能,帮忙解释一下,我应该看那里
展开
 我来答
songqier
2011-08-11 · TA获得超过370个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:127万
展开全部
慢慢来,争取把你讲懂。
char *a;定义的是一个字符串指针
a = "123456";给a赋值,即指针a指向字符串"123456",这里要切记!字符串"123456"其长度其实不是6,而是7,因为还有一个字符串结束符'\0'。这也是如果用字符串数组来表示这个字符串的话会这样定义char a[7] = {'1','2','3','4','5','6','\0'};。
还要搞清楚一点,定义char *a = "123456";时,用strlen函数得到这个字符串长度时,结果会是6,而不是7。这是因为,strlen函数求字符串长度是不计算'\0'的。
另外,定义char *a = "123456";时,执行printf("%s",a);会输出123456,输出的结束以\0结束。如果a++以后,再执行printf("%s",a);会输出23456。仔细体会。即a是一个指针,事先指向了字符串中的1,a++后指向了2,printf("%s",a)输出的是从a指向的数据开始直到\0结束。

char *a;说明a是一个指针,指针的初始化一般初始化为NULL,也就是指针不指向任何内存位置。这里给你透露一点,NULL在c语言中其实质为0,‘\0’的实质也是0,切记我讲的是c语言中的,如果在windows中的话,NULL就不是这回事了。

char * fun (char *s, char *t ) //括号里的s和t是形式参数,只说明传给这个函数的参数的类型
{
char *p , *r, *a;//定义了三个指针,其类型是char类型的,即指向字符串类型的指针。
/**********FOUND**********/
a == NULL; //a初始化为NULL,即不指向任何数据
while ( *s ) //while条件是s是否为NULL(前面说过,'\0'也一回事)
{ p = s; r = t;
while ( *r )
/**********FOUND**********/
if ( r == p ) { r++; p++; }//找到相同的头以后继续往后
else break;
/**********FOUND**********/
if ( *r ='\0' ) a = s; //遍历到r的结尾时,将得到的s赋给a
s++; //s++即指针往后移一位,遍历整个字符串
}
return a ; //a用来存储我们想要的数据,即想要的字符串
}

这个程序,我发现没法只写备注来讲清楚。直接画个建议伪流程图就清楚了。其实很简单
你只要搞清楚了最开始我讲的那些,求出结果的算法很容易想出的。休息了,如果还没想出来的话,追加问,我慢慢给你讲解哈。
互相交流学习
寻忘西浅学册1i
2011-08-11 · TA获得超过1566个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:162万
展开全部
string 是字符串,char是字符型,null是空值,指针的 return a 就是返回a 你那里调用返回哪里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-08-11
展开全部
1.string.h是一个头文件,后面函数的调用用到这个头文件里的东西,要说的话有点多,你可以百度“string头文件”
2.null代表空
3.char是个字符型啊,你指的什么定义没懂?要看详细的话建议去百科里看,那写得很多
4.不要光看reture a,看这个函数,简化了就是
char * fun (char *s, char *t )
{
char *a;
a=s;
.....
return a;
}
也就说这个fun函数最后会返回一个char类型的变量a,所以说主函数里p=fun()就是把这个变量a赋给p
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式