有一个字符数组的内容为:"student a am i",
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
解题的思路就是,首先将整体字符数组翻转一遍,这时,虽然语序是正确的,但是单词还是反序的,所以我们设置一个left指针和一个right指针分别确定左值和右值,再次调用翻转函数reverse_str将单词改为正确形式
#include<stdio.h>
int strlen(char* str){
int count = 0;
while (*str){
count++;
str++;
}
return count;//得到字符串长度
}
void reverse_str(char* left, char* right){
while (left < right){
char temp = *left;
*left = *right;
*right = temp; //将头尾内容进行交换
left++;
right--;
}
}
void reverse(char* str){
char* left = str;
char* right = str + strlen(str) - 1;
char* cur = str;
//先整体翻转
reverse_str(left, right);
while (*cur){
char* start = cur;
while (((*cur) != ' ') && ((*cur) != '\0')){
cur++;
}
//将单词翻转
reverse_str(start, cur - 1);
if (*cur == ' '){
cur++;
}
}
}
int main(void){
char str[] = "strdent a am i";
reverse(str);
printf("%s\n", str);
return 0;
}