编制具有如下原型的函数findLast:
char*findLast(char*sourceStr,char*subStr);
findLast函数则要返回源串sourceStr中最后一次出现subStr子字符串的头字符位置。
而后编制主函数,输入两个字符串,将它们用作实参来调用这两个函数,如果返回NULL输出-1,否则输出子字符串出现时头字符在原字符串的下标,每个结果占一行。
要求实现程序中不可使用“string.h”头文件内有关寻找子串的标准库函数。
【输入形式】输入源串sourceStr,子字符串subStr。
【输出形式】子字符串subStr最后一次在源串sourceStr中出现的位置
【样例输入】
welcometochinauniversityofminingandtechnology
in
【样例输出】29
#include<iostream>
using namespace std;
char*findLast(char*,char*);
int main()
{
char*a;
char sourcestr[100];
char substr[10];
cin.getline(sourcestr,100);
cin.getline(substr,10);
a=findLast(sourcestr,substr);
if(a==NULL)
cout<<-1;
else
cout<<a-sourcestr;
return 0;
}
char*findLast(char*sourcestr,char*substr)
{
int i=0,j=0,len1=0,len2=0,k=0,x=0;
char*p1=sourcestr;
char*p2=substr;
while(sourcestr[i]!='\0')
{
len1++;
i++;
}
i=0;
while(substr[i]!='\0')
{
len2++;
i++;
}
if(len1<len2)
return NULL;
else
{
for(i=0;i<len1;i++)
{if(*(p1+i)==*(p2+j))
{j++;
x=j;
}
else
{
j=0;
if(*p2==*(p1+i-x+1))
j++;
i=i-x+1;
}
if(j==len2)
{
k=i;
j=0;
}
}
}
if(k)
{for(i=0;i<k-len2+1;i++)
p1++;
return p1;
}
else
return NULL;
}
共有测试数据:5
平均占用内存:3.087K 平均CPU时间:0.80000S 平均墙钟时间:0.80854S
测试数据
评判结果
测试数据1
运行时间过长
测试数据2
输出错误
测试数据3
完全正确
测试数据4
运行时间过长
测试数据5
完全正确