//本文调试通过。
//从字符串中查找子字符串的位置数,返回位置数,-1:没找到,>=0,位置数
#include <iostream> using namespace std; int MystrstrPos(const char *str,const char *substr) { assert(str!=NULL && substr!=NULL); ? const char * ptemp=substr; ? int n=0; ? int pos=-1; ? bool flag_equ=false; ? while(*str!=0 && *substr!=0) ? { ?if(*str==*substr) ? ? ?{?if (!flag_equ)pos=n;? ?//上一次不等,这一次等,记录位置 ? ? ? ?flag_equ=true; ? ? ? ?str++; ? ? ? ?substr++; ? ? ?} ? ? ?else ? ? ?{ if (flag_equ)? ? ? ? ? //上一次等,这一次不等 ? ? ? ?{ ?substr=ptemp;? //substr要重新开始 ? ? ? ? ? pos=-1;? ? ? ? ? ? ? //位置也要清除 ? ? ? ?} ? ? ? ?flag_equ=false; ? ? ? ?str++; ? ? ?} ? ? ?n++; ? } ? return *substr? -1: pos; //如果subsubstr没有比较完,返回-1,否则返回pos }
int _tmain(int argc, _TCHAR* argv[]) { char str[50]="hellokitty"; ? char str1[50]="p"; ? char str2[50]="ll"; ? char str3[50]="llo"; ? char str4[50]="kitty"; ? char str5[50]="y"; ? char str6[50]="yy"; ? char str7[50]="kitty1"; ? cout<<MystrstrPos(str,str1)<<endl; ? cout<<MystrstrPos(str,str2)<<endl; ? cout<<MystrstrPos(str,str3)<<endl; ? cout<<MystrstrPos(str,str4)<<endl; ? cout<<MystrstrPos(str,str5)<<endl; ? cout<<MystrstrPos(str5,str6)<<endl; ? cout<<MystrstrPos(str,str7)<<endl; ? system("pause"); ? return 0; }
|