1.描述
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
2.牛客网链接
https://www.nowcoder.com/practice/ee5de2e7c45a46a090c1ced2fdc62355
3.思路
将一个单词进行倒置,第一步先把整个字符串进行倒置,然后再对每一个单词进行倒置,废话不多说开始叭
逆序整个字符串:
首先定义char arr[100]={0};
输入 gets(arr)//这里进行介绍一下gets函数,它是进行字符串输入的,而且还能进 行空格的读取,但是用法有点怪,在微软软件里(包括VS2019)进行输入的时候 要用gets_s,但是在牛客网上的时候,直接用gest
int len=strlen(arr);
定义函数reverse(arr,arr+len-1);
函数内容
逆序每个单词:
首先进行定义char*cur=arr;char*start=cur;
单词一旦遇到空格,表示一个单词的结束,从此下手
while(*cur!=‘ ’)
{
cur++
}
当while停下来的时候cur指向空格,而cur前一个位置就是单词的结束的位置例如(hello
)
这是一个单词的逆序,要进行多个的,再定一个表示开始,再调用reverse函数,传递两个参数,
第一个参数为start,第二个参数为cur-1.着就表示把一个单词逆序过去了,例如(hello world)
要跳要个空格,到下一个单词cur指向的是空格
cur++;
逃过去的时候,cur再赋值给start,此时就是一个循环了
假设还是(hello world)单词的结束并不是空格,第二个单词是以\0,结束
所以判断内容为(*cur!=' '&&*cur!='\0'),只要在这循环中遇到空格或者\0
就会结束 而大循环的循环内容为(*cur)
但是还是有问题的,当我们以\0为结束的时候cur++程序会进入死循环
在cur++;前面进行判断if(*cur!='\0')
4.整个程序
代码结果:
5.注意
该程序是在VS2019 中运行的结果,要是在牛客网上要把gets_s改为gets.
6.感想
对于题目要分析正确,首先是对整个求逆序,其次在对每个单词求逆序,还需要多多练习,
并熟练掌握。