有一個字元數組的内容為:"student a am i", 将數組的内容改為"i am a student"
要求:
不能使用庫函數
隻能開辟有限個空間(空間個數和字元串的長度無關)
eg:
student a am i
i ma a tneduts
i am a student
先将整個字元串翻轉過來,再依次将單詞翻轉過來
代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//student a am i
//i ma a tneduts
//i am a student
int Strlen(char* str){
//str指向的是一個空字元串
if (*str == '\0'){
return 0;
}
//str指向的不是一個空字元串,目前字元是字元串中的一個元素
return 1 + strlen(1 + str);
}
//數組被函數調用,隐式退化為指針
void Flip(char *str, int sz)
{
char *str1 = str;
char *left = str;
char *right = str + sz - 1;
while (left < right) {
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
while (*str1)
{
left = str1;
while ((*str1 != '\0') && (*str1 != ' '))
{
str1++;
}
right = str1 - 1;
while (left < right) {
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
if (*str1 == ' ')
{
str1++;
}
}
}
int main(){
char arr[] = "student a am i";
int length = Strlen(arr);
//翻轉
Flip(arr,length);
printf("%s\n", arr);
system("pause");
return 0;
}
運作結果:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YscjMfVmepNHLzMGROlXUU1UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0ATMzUTNxATM3IDMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)