「题解」字符串中的所有单词进行倒排

简介: 题目要求1、构成单词的字符只有26个大写或小写英文字母;2、非构成单词的字符均视为单词间隔符;3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;4、每个单词最长20个字母;

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

题目要求

1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;

事例

输入:I love you bit          输入:I @@like%*cpp21
输出:bit you love I          输出:cpp like I

🏡解题思路

首先定义一个字符指针数组,用于保存每个单词的起始字符地址,接下来将非字母符全部替换成为字符串结尾的标志,则单词字符字母遇到结尾就结束了,相当于把一个字符串以非字母字符进行切割成为了多少字符串,最终对字符指针数组进行逆序输出每个单词即可

🏡源码分享

1. #include<stdio.h>
2. #include<string.h>
3. int main()
4. {
5. char str[100001]={0};
6. int row=0;
7. while(gets(str)>0)
8.     {
9. char* ptr=str;
10. char* word[10000]={NULL};
11. while(*ptr!='\0')
12.               {
13. if(('z'>=*ptr&&*ptr>='a')||('Z'>=*ptr&&*ptr>='A'))
14.                       {
15.                           word[row++]=ptr;
16. while(*ptr!='\0'&&(('z'>=*ptr&&*ptr>='a')||('Z'>=*ptr&&*ptr>='A')))
17.                           {
18.                               ptr++;
19.                           }
20. continue;
21.                       }
22.                   *ptr='\0';
23.                   ptr++;
24.         }
25. for(int i=row-1;i>=0;i--)
26.         {
27. printf("%s ",word[i]);
28.         }
29. printf("\n");
30.     }
31. return 0;
32. }
33. 
34. 
35. 
36.

🏡代码分析

🤔可以多次输入字符串进行调试

while(gets(str)>0)

创建指针数组注意是指针数组而不是数组指针),去存放每个单词的首地址。有些伙伴会问为什么要用指针数组呢?为啥不直接创建指针去存放地址呢?首先,我不知道创建多少个指针才合适,其次,创建这么多指针,怎么去给他们赋值,怎么去命名。这些都是一些不可忽视问题,但是指针数组可以有效去解决这些问题。

char* word[10000]={NULL};

🤔如果是字母字符,则是单词的起始字符

if(('z'>=*ptr&&*ptr>='a')||('Z'>=*ptr&&*ptr>='A'))

🤔保存每个单词的起始地址

word[row++]=ptr;

🤔把本次的单词字母字符走完,直到遇到非字符字母

while(*ptr!='\0'&&(('z'>=*ptr&&*ptr>='a')||('Z'>=*ptr&&*ptr>='A')))

🤔不能继续向下,因为下边的ptr++会跳过当前非字母字符

continue;

🤔把非字母字符替换为字符串的结尾标志

*ptr='\0';

🤔针对所有单词的起始地址逆序输出

printf("%s",word[i]);

🌸🌸🌸希望通过这道题可以帮助大家提升学习编程的能力,以后遇到这种就可所向披里如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸



相关文章
|
7月前
|
测试技术
leetcode-1592:重新排列单词间的空格
leetcode-1592:重新排列单词间的空格
51 0
|
4月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度
|
4月前
【刷题记录】数字颠倒、单词倒排
【刷题记录】数字颠倒、单词倒排
|
7月前
每日一题(数字颠倒,单词倒排)
每日一题(数字颠倒,单词倒排)
38 1
|
7月前
|
Java
java字符串练习题6、最后一个单词的长度
java字符串练习题6、最后一个单词的长度
51 0
|
7月前
|
存储 编译器 C语言
Day2 排序子序列、倒置字符串
Day2 排序子序列、倒置字符串
54 0
|
算法 安全 Swift
LeetCode - #58 最后一个单词的长度
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
leetcode:58.最后一个单词的长度
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
66 0