解题思路
1.首先将student a am i 逆转成 i ma a tneduts。
2.然后将每个单词依次逆转。
逆转函数如下
实现字符逆转。
void change(char* ch ,int sz)
{
char* right = ch+sz-1;
char* left = ch;
while (left < right)
{
char temp = 0;
temp = *right;
*right = *left;
*left = temp;
left++;
right--;
}
}
主函数检验
int main()
{
char ch[] = "student a am i";
int len = sizeof(ch) / sizeof(ch[0]) - 1;
change(ch, len);
printf("%s\n", ch);
return 0;
}
可以看到 i ma a tneduts。
2.将每一个单词依次逆转,
函数
每个单词的结束标志为空格,最后一个单词的结束标志为‘\n’,
所以遍历整个字符串。当遇到空格时,停下来,将之前的单词逆转
使用循环将每一个单词都进行逆转。
void fun(char ch[])
{ //i ma a tneduts
while (*ch != '\0')
{
char* t = ch;
int count = 0;
while (*ch != ' '&& *ch != '\0')
{
ch++;
count++;
}
change(t, count);
if (*ch != '\0')
{
ch++;
}
}
}
全部代码
void change(char* ch ,int sz)
{
char* right = ch+sz-1;
char* left = ch;
while (left < right)
{
char temp = 0;
temp = *right;
*right = *left;
*left = temp;
left++;
right--;
}
}
void fun(char ch[])
{ //i ma a tneduts
while (*ch != '\0')
{
char* t = ch;
int count = 0;
while (*ch != ' '&& *ch != '\0')
{
ch++;
count++;
}
change(t, count);
if (*ch != '\0')
{
ch++;
}
}
}
int main()
{
char ch[] = "student a am i";
int len = sizeof(ch) / sizeof(ch[0]) - 1;
change(ch, len);
fun(ch);
printf("%s\n", ch);
return 0;
}