有一个字符数组的内容为:“student a am i”,
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
student a am i
i ma a tneduts
i am a student
思路:
先在reverse_string()函数中将整个字符串翻转过来,在函数中设置左右两个指针,每交换一次字符指针向中间移动一个字符,直至左指针大于或等于右指针时,再调用reverse_word()函数交换字符串中的单词,在此函数中同样设置左右两个指针,要注意的是,在交换单词字符时,右指针的边界是空格字符,当交换到最后一个单词时,右指针的判定条件多了判定字符‘ \0 ’。
#include <stdio.h>
#include <windows.h>
#pragma warning (disable:4996)
void reverse_word(char *arr)
{
char temp = 0;
while (*arr!='\0')
{
char *left = arr;
char *right = arr;
while (*right != ' '&&*right!='\0')
{
right++;
}
right--;
while (left < right)
{
temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
while (*arr != ' '&& *arr != '\0')
{
++arr;
}
if (*arr != '\0')
{
++arr;
}
}
}
void reverse_string(char *arr)
{
char temp = 0;
char *left = arr;
char *right = arr;
while (*right)
{
*right++;
}
*right--;
while (left < right)
{
temp = *left;
*left = *right;
*right = temp;
*left++;
*right--;
}
reverse_word(arr);
}
int main()
{
char arr[] = { "student a am i" };
printf("%s\n", arr);
reverse_string(arr);
printf("%s", arr);
system("pause");
return 0;
}