C语言K&R习题4-1。编写函数strindex(s, t),它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1。

自我解答:

实现思路,首先使字符串s和t倒序,之后从左到右检测第一次出现的位置即可。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
# define MAXLEN 100

// 编写函数strindex(s, t),它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1。

void reverse(char s[]) //reverse函数使字符串倒序
{
    int i,j,len=strlen(s);
    char temp[len];
    for(i=0,j=len-1;i<len;++i)
    temp[i] = s[j--];
    for(i=0;i<len;++i)
    s[i] = temp[i];
    s[len] = '\0';
}

int strindex(char s[],char t[]) 
{
    int i,j,k,flag;
    reverse(s);
    reverse(t);
    for(i=0;s[i]!='\0';++i) //遍历s
    {
        for(j=0,k=i,flag=0;t[j]!='\0' && t[j]==s[k];++j,++flag) //检测从s[i]开始,是否有与t相同的字符串
        k++;
        if (flag>0 && t[flag] == '\0') //若t被遍历则输出最右边出现的位置
        {
            reverse(t);
            reverse(s);
            return strlen(s)-i-strlen(t);
        }
    }
    return -1;
}

main()
{
    char s[MAXLEN],t[MAXLEN];
    char c,d,i=0,j=0;
    while((c=getchar())!='\n')
    {
        s[i++] = c;
    }
    s[i] = '\0';
    while((d=getchar())!='\n')
    {
        t[j++] = d;
    }
    t[j] = '\0';
    printf("The index is %d.",strindex(s,t));
    getchar();
}

输出结果:

lifeissohardissouneasy
is
The index is 12.

调试发现reverse其实并不必要,当程序遇到第一个与t相符的字符串后会记录其位置,程序不结束,然后继续扫描s,直到遇到最后一个t后,以'\0\结束搜索,此时记录的位置即为最右侧的t位置。如下(参考答案):

/* strrindex: returns rightmost index of t in s, -1 if none                 */
int strrindex(char s[], char t[])
{
    int i, j ,k, pos;
    
    pos = -1;
    for(i = 0; s[i] != '\0'; i++)
    {
        for(j = i, k = 0; t[k] != '\0' && (s[j] == t[k]); j++, k++);  
        if(k > 0 && t[k] == '\0') 
            pos = i;
    }
        return pos;
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值