C primer plus 第六版 第十一章 第八題 程式設計練習答案
Github地址:φ(>ω<*)這裡這裡。
/*
本次任務設計並測試一個名為 char *srting_in(const char * s1, const char * s2) 的函式。
本函式要求接收兩個指向字串的指標作為引數。 如果第二個字串包含在第一個字串,
就返包含在第一個字串開始的地址。就是第一個字串有第二個字串相同內容的位置,第一個字母的地址。
*/
#include<stdio.h>
#define n 50
char *srting_in(char * s1, char * s2);
int main(void)
{
int i = 0; // 建立這個變數是因為s2的換行符會妨礙字元匹配。
char s1[n] = {};
char s2[n] = {};
char quit = 0;
char * result = NULL;
while(quit != 'q')
{
printf("Please input the first string(The limit is 20 character):\n");
fgets(s1, n, stdin);
fflush(stdin);
printf("Please input the second string(The limit is 20 character):\n");
fgets(s2, n, stdin);
// 接下來的步驟都是處理換行符,直到 Line 38.
while(s2[i] != '\n')
{
i++;
}
if(s2[i] == '\n')
{
s2[i] = '\0';
}
fflush(stdin);
result = srting_in(s1, s2);
if(result != NULL)
{
printf("\nThe string 2 is in string 1.. The address is %p. \n", result);
}
else
{
printf("\nThe sring 2 isn't in string 1.\n");
}
printf("Do you want to quit or continue(Enter 'q' to quit)? Choies:\n");
quit = getchar();
fflush(stdin);
}
printf("Bye ~\n");
getchar();
return 0;
}
char *srting_in(char * s1, char * s2)
{
// 想法很簡單,找到相同首字母的時候,用兩個指標臨時存放當前位置,
// 然後巢狀一個迴圈去繼續匹配。
int i = 0; // 這個i是用於在迴圈中識別是否匹配成功而退出。
char * result2 = NULL;
char * temporary1 = NULL;
char * temporary2 = NULL;
while(*s1 != '\n' && *s1 != '\0')
{
if(*s1 == *s2)
{
// 存放當前s1, s2的地址。
temporary1 = s1;
temporary2 = s2;
while(*s2 != '\0')
{
if(*s1 != *s2)
{
break;
}
s1++;
s2++;
}
if(*s2 == '\0')
{
i = 1;
// 這裡的意思是,經過剛剛的while迴圈,如果s2目前指向的位置是空字元,
// 說明s1跟s2已經匹配到s2結尾而沒有任何差錯,故匹配成功。接下來直接跳出大迴圈。
break;
}
else
{
// 如果s2不是空字元,那麼說明匹配失敗,則繼續大迴圈匹配。
s2 = temporary2;
}
}
else
{
s1++;
}
}
if(i > 0)
{
result2 = temporary1;
}
else
{
result2 = NULL;
}
return result2;
}
相關文章
- C primer plus 第六版 第十一章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十三題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十四題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十二題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十一題題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第九題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第一題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第十一題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第十二題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第十三題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第十四題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第八章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第九章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第九題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第一題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第九章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第十一題 程式設計練習答案程式設計