| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1075 人关注过本帖
标题:指针问题 帮忙改一下代码
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:4 回复次数:12 
指针问题 帮忙改一下代码
问题描述

编写函数strrindex(s, t),它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1。
设计一个合适的主程序测试你编写的函数。字符串的长度不超过1000。

输入

输入数据有两行,第一行是字符串s,第二行是字符串t。

输出

如果字符串s中包含字符串t,则输出t在s中最右边出现的位置,否则输出-1。

输入样例

I am a student.
am

输出样例

2


#include<stdio.h>
int strrindex(char s[1000],char a)
{
    int i,n=0,b=0;
    char *p;
    p=s;
    while(*p!='\0')
    {
       n++;
       p++;
       if(*p==a)
           b=n;
    }
    return b;
}
int main()
{
    char s[1000],a;
    int i;
    gets(s);
    scanf("%s",&a);
    printf("%d\n",strrindex(s,a));
    return 0;
}

搜索更多相关主题的帖子: 代码 指针 
2009-11-19 16:25
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:1 
程序代码:
#include<stdio.h>
#include<string.h>

int strrindex(char s[],char a[])
{
    int i,n,loc,b,count;
    i=n=loc=0;
    b=0;
    char test[100];
    char *p;
    p=s;
    while(*p!='\0')
    {
        while(*p!=' '&& *p!='\0')
        {
            p++;
            i++;
        }
        loc++;
        for(count=0;n<i;n++,count++)
            test[count]=s[n];
        test[count]='\0';
        if(*p!='\0')
        {
            p++;        
            i++;
        }
        n=i;
        if(strcmp(test,a)==0)
        {            
            b=loc;
        }
    }
    return b;
}
int main()
{
    char s[1000];
    char a[1000];
    //int i;
    gets(s);
    gets(a);
    printf("%d\n",strrindex(s,a));
    return 0;
}
这是我看你的题目做的,不知道合LZ的意思没··
2009-11-19 17:38
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
"否则输出-1"这句话好象没有考虑啊

学无止境!
2009-11-19 20:20
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:2 
程序代码:
#define LONG 1000
int strrindex(char *s, char *t);
#include<stdio.h>
main()
{
char s[LONG],t[LONG];
gets(s);
gets(t);
if(strrindex(s,t)!=-1)
printf("%d\n",strrindex(s,t));
else
puts("NO");
return 0;
}
int strrindex(char *s,char *t)
{
int i,j,len_1,len_2;
len_1=strlen(s);
len_2=strlen(t);
j=0;
for(i=0;i<len_1;i++){
if(*(s+i)==*(t+j))
j++;
else
j=0;
if(j==len_2)
return (i-j+1);
}
return -1;
}

愿用余生致力编程
2009-11-19 21:24
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:1 
回复 楼主 liucs116
这道题我们还可以用库函数strstr()来实现,更加方便!
程序代码:
#define LONG 1000
#include<stdio.h>
#include<string.h>
main()
{
char s[LONG],t[LONG],*loc;
gets(s);
gets(t);
loc=strstr(s,t);
if(loc!=NULL)
printf("%d",loc-s);
else
puts("NO");
return 0;
}

愿用余生致力编程
2009-11-19 21:29
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:0 
回复 3楼 liucs116
改个数字不就可以了,这还问?
做ACM不是只要关心核心算法吗?
2009-11-19 22:49
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:0 
回复 4楼 我菜119
恩···这个算法其实有错误的,题目是说字符最右边的位置
我按兄台的算法用
I am a student
a
检验发现输出的是2,但其实应该是3
2009-11-19 22:51
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
回复 4楼 我菜119
    交上去是答案错误啊!
 
测试一下
qwe rt
rt
为什么会是4啊!

学无止境!
2009-11-22 14:32
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:0 
回复 8楼 liucs116
原来LZ根本就没有看我的回复···
看他的程序
程序代码:
for(i=0;i<len_1;i++){
     if(*(s+i)==*(t+j))
            j++;
     else
           j=0;
     if(j==len_2)
       return (i-j+1);
}
qwe rt
rt
测试,s指针移动与t指针头字符比较,如果相等,则j++;这里到i=4时两指针所指字符相等,i++到5,再比较t的第二个字符,并且j++到2,所以j==len_2,这时5-2+1=4所以返回的4
这个还有个错误就是只能测第一个与t相等字符串的位置,而不能测最右的位置,原因是在j=len_2时就return了
2009-11-22 19:48
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
收藏
得分:0 
原来给个错误的程序还能多拿分的···这世道···
2009-11-22 19:52
快速回复:指针问题 帮忙改一下代码
数据加载中...
 
   



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

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