NO.28 ---- C語言入門練習23
阿新 • • 發佈:2019-01-05
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
// 有一個字元陣列的內容為:“student a am i”,
// 請你將陣列的內容改為"i am a student".
// 要求:
// 不能使用庫函式。
// 只能開闢有限個空間(空間個數和字串的長度無關)。
//
// student a am i
// i ma a tneduts
// i am a student
// 由於不能使用庫函式,所以需要先寫一個函式來求字串的長度
int mystrlen(const char* str) { int count = 0; while (*str != '\0') { count++; str++; } return count;
}
// 該函式用於實現翻轉
void reverse(char *left, char *right) { while (left < right) { char temp = *left; *left = *right; *right = temp; left++; right--; } } void reverse_str(char *str, int sz) { char *str1 = str; char *left = str; char *right = str + sz - 1; reverse(left, right); // 先將字串整體反轉 while (*str1) { left = str1; while ((*str1 != '\0') && (*str1 != ' ')) // 找到單詞,此處一定要加(*str1 != '\0')條件限制, // 因為找到最後一個單詞的時候,*str1永遠也不為空格 { str1++; } right = str1 - 1; // 此時str1指向單詞後方的空格,需要減一方能指向單詞的最後一個字母 reverse(left, right); // 繼整體反轉後再次反轉單詞,能使單詞拼寫順序恢復過來 if (*str1 == ' ') // 等於空格讓指標後移一位否則不能參與下次迴圈。 { str1++; } } } int main() { char arr[ ] = "student a am i"; int sz = mystrlen(arr); printf("移動完成後為:"); reverse_str(arr, sz); printf("%s\n", arr); system("pause"); return 0; }
執行結果: