将“student a am i”在不使用库函数和不单独开辟空间的情况下转为“i am a student”。
可先将student a am i转换为
i ma a tneduts在转换为
i am a student
故首先应将字符串逆置,在对单个单词进行逆置:
1:将字符串逆置,利用Strlen函数求字符串的长度。
void Reverse(char *left, char *right){
while (left < right){
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int Strlen(char *string){
int count = 0;
while (*(string + count) != '\0'){
count++;
}
return count;
}
2:在对单个单词逆转,改变指针p所指向位置判断是否为空,当检测到空时即为一个单词,利用strat标记单词的头部,p-1标记单词的尾部在调用函数进行逆转,当p所指位置为‘\0’时即为字符串结束,结束循环。
void ReverseSentence(char *string){
char *left = string;
char *right = string + Strlen(string) - 1;
char *p = string;
Reverse(left, right);
while (*p != '\0'){
char *start = p;
while (*p != ' ' && *p != '\0'){
p++;
}
Reverse(start, p - 1);
if (*p == ' '){
p++;
}
}
}