有一个字符数组的内容为:"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;
}
运行结果: