编制具有如下原型的函数findLast:
char*findLast(char*sourceStr,char*subStr);
findLast函数则要返回源串sourceStr中最后一次出现subStr子字符串的头字符位置。
而后编制主函数,输入两个字符串,将它们用作实参来调用这两个函数,如果返回NULL输出-1,否则输出子字符串出现时头字符在原字符串的下标,每个结果占一行。
要求实现程序中不可使用“string.h”头文件内有关寻找子串的标准库函数。
【输入形式】输入源串sourceStr,子字符串subStr。
【输出形式】子字符串subStr最后一次在源串sourceStr中出现的位置
【样例输入】
welcometochinauniversityofminingandtechnology
in
【样例输出】29
下面是我的代码
#include
using namespace std;
char*findfirst(char*sourceStr,char*subStr);;
int main()
{
char str[30],substr[20];
char p;
p=str;
cin>>str>>substr;
p=findfirst(str,substr);
if(p!=NULL)
{
cout<<p-str+1<<endl;
}
else
{
cout<<-1;
}
return 0;
}
char*findfirst(char *sourceStr,char*subStr)
{
char*p3;
char a[30]={'\0'};
p3=a;
char*p1=sourceStr,*p2=subStr;
int len1=0,len2=0;
while(*p1!='\0')
{
len1++;
p1++;
}
while(*p2!='\0')
{
len2++;
p2++;
}
p1=sourceStr;
p2=subStr;
if(len1<len2)return NULL;
else
{
while(*p1!='\0')
{
if((*p1==*p2)&&((p2+1)=='\0'))
{
p3=p1;
}
if(*p1==*p2)
{
p1++;
p2++;
}
else
{
if(p2!=subStr)p2=subStr;
else p1++;
}
}
if((*p1=='\0')&&(*p3!='\0'))return p3-len2;
if(*p3=='\0') return NULL;
}
}