程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言的問題

C語言的問題

編輯:C語言問答

C語言的問題

15
#include<stdio.h>
#include<string.h>
char *fun(char *s,char *t)
{
char *p,*r,*a;
/************found************/
a=NULL;
while(*s)
{
p=s;r=t;
while(*r)
/************found************/
if(*r==*p)
{
r++;
p++;
}
else break;
if(*r=='\0') a=s;
s++;
}
return a;
}
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");
}
麻煩解釋下每行的意思,謝謝

最佳回答:

#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;
}

 

追問:
因為S=S,接著r++;p++;比較t,又相等;比較u,又相等。此時r已經到了
r是什麼?
回答:
r是指向字串的指針啊,r此時等於'\0'(字符串末尾)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved