有一个字符数组的内容为:"student a am i",
请你将数组的内容改为"i am a student".
要求:
不能使用库函数。
只能开辟有限个空间(空间个数和字符串的长度无关)。
第一部分:字符串逆转
void str_reverse1(char *left, char *right) //全逆转
{
assert(NULL != left);
assert(NULL != right);
while(left<right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
第二部分:单词逆转
char *str_reverses(char *str, int size)
{
assert(NULL != str);
char *str1 = str;
char *left = str;
char *right = str + (size-1);
str_reverse1(left, right);
while('\0' != *str1)
{
left = str1;
while((*str1 != ' ') && (*str1 != '\0')) //单词结束和字符串结束(两种情况)
{
str1++;
}
right = str1 - 1;
str_reverse1(left, right); //单词逆转
if(*str1 == ' ')
{
*str1++;
}
}
return str;
}
测试:
int main()
{
char arr[] = "student a am I";
int sz = strlen(arr);
char *ret = str_reverses(arr, sz);
printf("%s\n", ret);
return 0;
}