这是牛客网的原题,大家可以先做一下
这道题与单纯的字符逆序不同,我们看这道题的输入和输出。
此题是将一句话的每个单独的单词分开,注意最后的一个单词的句号是不逆序的。
所以我们做这道题的思路就是先将一句话每个单词逆序,之后再一个一个单词的逆序,这样就实现了让每个单词逆序。
那我们先写一个逆序函数
void reverse(char*left,char*right)
{
assert(left&&right);
while(left<right)
{
char tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
int main()
{
char arr[100]={0};
gets(arr);
int len=strlen(arr);
reverse(arr,arr+len-1);
}
这里我就不介绍实现这个函数了,可以看我往期的博客实现字符数组倒序打印(C语言)_GO1ING的博客-CSDN博客_c语言将字符数组逆序输出
再逆序之后我们就需要逆序每个单词,我们先看如何实现的
#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char*left,char*right)
{
assert(left&&right);
while(left<right)
{
char tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
}
int main()
{
char arr[100]={0};
gets(arr);
int len=strlen(arr);
reverse(arr,arr+len-1);
char*cur=arr;
while(*cur)
{
char*start=cur;
while(*cur!=' '&&*cur!='\0')
{
cur++;
}
reverse(start,cur-1);
if(*cur!='\0')
cur++;
}
printf("%s\n",arr);
return 0;
}
先设置一个指针,让指针指向的内容只要不是空格和结束标志我们,就让这个指针往下走,直到指向空格位置就停下,那我就先设置一个开始指针start,这样我们就再传参进入这个函数即可。
这样这个功能就实现了。