#include<stdio.h>
#include<string.h>
/****
程序整體思路:
假設父字符串Student,子是Stu
那麼首先父字符串讀入一個S,子讀入一個S,
因為S=S,接著r++;p++;比較t,又相等;比較u,又相等。此時r已經到了
末尾,退出while,把a直接賦值Student,返回。
假設父字符串Student,子是abc
那麼首先父字符串讀入一個S,子讀入一個a,
因為S!=a,直接退出內層循環;父字符串讀入t,進入內循環與a比較,又不想等……
最後父字符串讀到末尾了,因為a始終沒有賦值,因此a=NUll。
*****/
char *fun(char *s,char *t)
{
char *p,*r,*a;
/************found************/
a=NULL;
//搜索s,查看主字符串是否已經搜索到了尾?
while(*s)
{
p=s;r=t;
//搜索r,查看主字符串是否已經搜索到了尾?
while(*r)
{
//如果r的字符等於s的字符,進一步比較兩者的後一個字符
if(*r==*p)
{
r++;
p++;
}
//如果不等,則退出本次循環;
else break;
}
//如果r到了末尾,表示已經搜索完畢,父字符串包含子字符串
if(*r=='\0') a=s;
//父字符串往後推進一個字符進行比較
s++;
}
return a;
}
void main()
{
char s[100],t[100],*p;
//輸入一個主的字符串
printf("\nPlease enter string S:");
scanf("%s",s);
//輸入一個子的字符串
printf("\nPlease enter substring t:");
scanf("%s",t);
//查詢子字符串在父字符串中是否存在
p=fun(s,t);
if(p)
printf("\nThe result is :%s\n",p);
else
printf("\nNot found!\n");
}
假設兩種情況,不太好標注。你勉強看看。
一般的,程序說明必須在程序前,不能在中間的,中間只能是標注語句功能。
while(*s)
{
假設父字符串Student,子是Stu
那麼首先父字符串讀入一個S
p=s;r=t;
//子讀入一個S,
while(*r)
{
//因為S=S,接著r++;p++;比較t,又相等;比較u,又相等。
if(*r==*p)
{
r++;
p++;
}
//假設父字符串Student,子是abc
那麼首先父字符串讀入一個S,子讀入一個a,
因為S!=a,直接退出內層循環;父字符串讀入t,進入內循環與a比較,又不想等……總是break
else break;
}
//此時r已經到了
末尾,退出while,把a直接賦值Student,返回。
if(*r=='\0') a=s;
//父字符串往後推進一個字符進行比較
s++;
}
return a;
}