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

简介: 题目要求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]);

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



相关文章
|
9月前
|
测试技术
leetcode-1592:重新排列单词间的空格
leetcode-1592:重新排列单词间的空格
59 0
|
4月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
35 0
|
6月前
【刷题记录】数字颠倒、单词倒排
【刷题记录】数字颠倒、单词倒排
|
9月前
每日一题(数字颠倒,单词倒排)
每日一题(数字颠倒,单词倒排)
44 1
|
9月前
|
索引
力扣1859 将句子排序
力扣1859 将句子排序
|
9月前
|
C++ Python
leetcode-557:反转字符串中的单词 III
leetcode-557:反转字符串中的单词 III
65 0
1185:单词排序
1185:单词排序
160 0
|
算法
1304 字符串的相似度 后缀数组
1304 字符串的相似度 后缀数组
87 0
leetcode151反转字符串中的单词
leetcode151反转字符串中的单词
65 0
leetcode151反转字符串中的单词
力扣刷题记录——521. 最长特殊序列 Ⅰ、541. 反转字符串 II、557. 反转字符串中的单词 III
力扣刷题记录——521. 最长特殊序列 Ⅰ、541. 反转字符串 II、557. 反转字符串中的单词 III
127 0
力扣刷题记录——521. 最长特殊序列 Ⅰ、541. 反转字符串 II、557. 反转字符串中的单词 III