//主函数
int main() {
char str[] = "student a am i";
int len = strlen(str);
inversion(str, len);//反转整个字符串,
change(str, len);//把字符串通过空格分隔,分别通过inversion()函数进行反转
int i = 0;
for (i = 0; i < len; i++){
printf("%c", str[i]);//打印反转后的字符串
}
return 0;
}
//反转函数
void inversion(char str[],int len){
int left = 0;
int right = len - 1;
while (left <= right){
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
//把字符串分批之后,通过inversion()函数进行反转
void change(char str[], int len){
int count = 0;//为inversion()函数提供需要反转的字符个数
int i = 0;
int left = 0, right = 0;
while (i <= len){
left = i;//记录每部分开始的下标
while (str[i] != ' ' && i < len){
count++;//记录' '之间有几个字符
i++;
}
right = count;
inversion(str + left,right);//倒置每一部分,str + left 代表从对应的字符开始反转
i++;//从上面的while函数跳出后,如果不进行自增,则无法再次进入上面的while循环.
count = 0;//反转过前一部分字符的时候,需要重置count为下一次的反转重新计数
}
}