自我解答:
实现思路,首先使字符串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;
}