1.题目描述
题目链接:https://www.nowcoder.com/questionTerminal/8869d99cf1264e60a6d9eff4295e5bab
2.题目分析
思考一下,我们可以分为两步
- 第一步,将整个字符串逆序
- 第二步,把逆序后的每个单词再逆序
或者我们可以:
- 第一步,逆序每个单词
- 第二步,再逆序整个字符串
- 逆序字符串,需要告诉字符串的起始位置和结束位置
- 逆序单词,同样需要告诉单词的起始位置和结束位置
这两种算法思维都是可以的,那我们实践一下
3.代码
我们可以封装一个reverse函数来进行字符串逆序
实现逻辑是这样的
reverse函数
void reverse(char* left,char* right){ while (left<right) { char tmp=*left; *left=*right; *right=tmp; left++; right--; } }
逆序整个字符串,调用这个函数,逆序单词同样可以调用这个函数
用while循环,当开始指针遇到空格或者'\0'的时候就停止;没有遇到空格或者'\0'的时候,则是一个单词,逆序这个单词
可以看主函数的代码理解
主函数
#include <stdio.h> void reverse(char* left,char* right){ while (left<right) { char tmp=*left; *left=*right; *right=tmp; left++; right--; } } int main() { char arr[101]={0}; gets(arr); //逆序整个字符串 int len=strlen(arr); reverse(arr,arr+len-1); //逆序每个单词 char* cur=arr; while(*cur){ char* strat=cur; while (*cur!=' '&&*cur!='\0') { cur++; } char* end=cur-1; reverse(strat, end); if(*cur==' ') cur++; } printf("%s\n",arr); return 0; }
这样,我们这个问题就解决了
为什么使用gets()接收字符串呢?
因为scanf()接收字符串,遇到空格就停止不会继续往后读取了
4.总结
同样我们可以感受到,写代码不仅仅是简单的敲敲键盘,更重要的是我们的思维,我们一定要多多练习,锻炼自己的思维能力
一个优秀的程序员肯定是先思考再敲代码的,思维永远走在双手的前面,一起加油吧!小杜陪各位一起成长