"student a am i"變為'' i am a student"
阿新 • • 發佈:2018-12-18
有一個字元陣列的內容為:“student a am i”, 請你將陣列的內容改為"i am a student". 要求: 不能使用庫函式。 只能開闢有限個空間(空間個數和字串的長度無關)。 student a am i i ma a tneduts i am a student
思路: 兩個函式 1.字串逆置函式 2.計算字元長度函式 主函式中先直接可輸出student a am i 然後通過字串函式逆置輸出i ma a tneduts 再以空格之間連續字元進行逆置,最後輸出i am a student
# include <stdlib.h> #include<stdio.h> #include<assert.h> int my_strlen(const char *p) //自定義計算字串長度函式,使得p就指向字串a { int count=0; //定義count為字串長度 assert(p != NULL); //判斷指標變數是否為空 count = 0; while(*p++) //判斷字串是否遇到‘\0’ { count++; } return count; //返回字串長度 } void swap(char *left,char *right) //自定義swap函式 { assert(left !=NULL); //判斷指標變數是否為空 assert(right !=NULL); while(left<right) //左地址小於右地址,則執行以下操作 { char t = *left; *left = *right; *right = t; //進行字串首末尾互換 right--; //末尾前移 left++; //首位後移 } } int main() { char a[] = "student a am i"; //定義字元型陣列並初始化 char *p = a; //定義指標變數p指向a char *left = a; char *right = a; printf("%s\n",a); //輸出字串student a am i swap(p,p+my_strlen(a)-1); //呼叫my_strlen函式計算字元長度串,再呼叫swap自定義函式逆置字串 printf("%s\n",a); //輸出字串i ma a tneduts while(*p) //判斷字串是否遇到‘\0’ ,執行字串內部以2個空格所夾的字串逆置 { while((*p != ' ')&&(*p != '\0')) //判斷字串不等於空格,且不等於‘\0’,執行以下操作 { right++; //在以上程式中right以指向首地址,讓它向後移動 p++; } swap(left,right-1); //呼叫swap函式,字串內部字元進行逆置 if(*p) { left = right+1; right = left; //字串內部,向空格的下一個字元進行位置變化 p++; } } printf("%s\n",a); //輸出字串i am a student system ("pause"); //系統函式,防止執行結果快閃 return 0; }