问题分析:
这个问题要进行两次翻转,一次是跟着整体的反转,把数组翻转为i ma a tneduts
第二次是每个单词的翻转 翻转为 i am a student
第一次直接进行翻转,第二次要使用循环,外层循环实现每个单词的遍历,内层循环实现单词的交换具体实现如下所示:
int MyStrlen(char*arr)
{
int count = 0;
while (*arr != '\0')
{
count++;
arr++;
}
return count;
}
void reverse(char*left, char*right)
{
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
void reverse2(char*arr)
{
char*left = arr;
char*right = arr + MyStrlen(arr) - 1;
char*p = arr;
reverse(left, right);
while (*p != '\0')
{
char *start = p;
while (*p != ' '&&*p != '\0')
{
p++;
}
reverse(start, p - 1);
if (*p ==' ')
{
p++;
}
}
}
int main()
{
char arr[] = "i am a student";
reverse2(arr);
printf("%s\n", arr);
system("pause");
return 0;
}