| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1048 人关注过本帖
标题:这个程序看不懂 求高手解答
只看楼主 加入收藏
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:25 
这个程序看不懂 求高手解答
#include <stdio.h>
#include <string.h>

char *fun(char *s, char *t)
{
char *a, *p, *r;
a=NULL;
while(*s)
{
p=s;
r=t;
while(*r)
if(*r==*p)
{
r++;
p++;

}
else
break;
if(*r=='\0')
a=s;
s++;
}
return(a);
}


void main()
{
char s[20], t[20], *p;
printf("please input string s:");
scanf("%s", s);
printf("please enter string t:");
scanf("%s", t);
p=fun(s, t);
if(p)
printf("the result is %s", p);
else
printf("not found!");
getch();
}

2015-08-15 12:29
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:0 
哪里不懂  ,,单步调试
2015-08-15 12:30
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 2楼 T_MACC
这个程序的目的是 求出s所指字符串中最后一次出现的t所指字符串的地址 并用过函数值的返回, 在主函数中输出从此地址开始的字符串   就是看不到

不要不要的。。。
2015-08-15 12:34
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:3 
数据结构里面一个算法比较字符串  搜索一下串的模式匹配算法  跟这个程序一样几乎除啦输出
#include <stdio.h>
#include <string.h>
//比较字符串s中是否包含t    返回s
  // s   1234   t   123
char *fun(char *s, char *t)
{
char *a, *p, *r;
a=NULL;
while(*s)  //循环从  1  开始
{
p=s;    //s地址赋值给p
r=t;    //同上
while(*r)    //对t 中123进行循环比对       1==1   2==2   3==3   4!=''   
if(*r==*p)  //
{
r++;  
p++;

}
else
break;
if(*r=='\0')
a=s;      //因为 *r==、0    所以 s地址赋值给a
s++;     //所以这里s++   地址++   也就是*s==2   又开始循环啦
}
return(a);  //返回值  也就是s的地址
}


void main()
{
//字符串输入
char s[20], t[20], *p;
printf("please input string s:");
scanf("%s", s);
printf("please enter string t:");
scanf("%s", t);

p=fun(s, t);//传参
//判断p是否为空  选择进行输出
if(p)  //p也就相当于字符串s
printf("the result is %s", p);
else
printf("not found!");
}
2015-08-15 13:03
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:0 
你把功能在描述清楚点   我可以帮你看看
2015-08-15 13:12
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 5楼 T_MACC
这个程序的目的是 求出s所指字符串中最后一次出现的t所指字符串的地址 并用过函数值的返回, 在主函数中输出从此地址开始的字符串   
就是  如果输入s=abc123ab12345ab67890    t=ab
那么 输出就是67890

不要不要的。。。
2015-08-15 14:49
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 4楼 T_MACC
这个好像只能实现  输出在字符串s中第一次遇到的t字符串把 就是
s=123ab456ab789   t=ab

然后输出  456ab789   


是么



不要不要的。。。
2015-08-15 15:04
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:5 
char *fun(char *s, char *t)
{
    char *p;
    int i;

    while (*s) ++s;
    for (--s; *s; --s) {
        for (p = s, i = 0; t[i] && *p == t[i]; ++p, ++i);
        if (!t[i]) return p;
    }
    return NULL;
}

梦想拥有一台龙芯3A-4000
2015-08-15 16:31
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 8楼 ditg
更看不懂你的了

不要不要的。。。
2015-08-15 16:53
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:2 
他写的不错
#include <stdio.h>
char *fun(char *s, char *t)
{
    char *p;
    int i;

  while (*s)   //s=abc123ab12345ab67890    t=ab    先将s中字符倒置也就是从后往前遍历,与t中字符进行比较
        ++s;
    for (--s; *s; --s) {
        for (p = s, i = 0; t[i] && *p == t[i]; ++p, ++i); //精华在这   a与0比   不同   a与9比较   这样   当a与a相同时  T  中的b与s中a后的字符进行比较
        if (!t[i])
            return p;
    }
    return NULL;
}


void main()
{
//字符串输入
char s[200], t[200], *p;
printf("please input string s:");
scanf("%s", s);
printf("please enter string t:");
scanf("%s", t);

p=fun(s, t);//传参
//判断p是否为空  选择进行输出
if(p)  //p也就相当于字符串s
printf("the result is %s", p);
else
printf("not found!");
}
2015-08-15 17:34
快速回复:这个程序看不懂 求高手解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015739 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved