题目:单词倒排
描述:对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母
数据范围:字符串长度满足 1≤n≤10000;
输入描述:
输入一行,表示用来倒排的句子
输出描述:
输出句子的倒排结果
示例一:
输入:I am a student
输出:student a am I
示例二:
输入:$bo*y gi!r#l
输出:l r gi y bo
解题思路:
1,整体思想是双指针法,定义一对快慢指针 fast,slow;
2,找字母尾部:首先让 fast 指向数组的尾元素,然后找到从后向前找字母的尾部,当 arr[fast] 不是字母时 fast--,直到指向字母,而后令 slow = fast ,此时 slow 指向字母尾部;
3,找字母头部:当arr[fast] 是字母时 fast--,直到指向非字母,然后打印 arr[fast+1] 到arr[slow] 之间的值即可,后面加上分隔符;
思路实现:
先输入字符串因为带有空格,所以 scanf 不好使,使用 gets ,运用字符串函数 strlen 算出数组实际个数,随后定义双指针 fast,slow 并将其赋值;
#include<string.h>
int main() {
char arr[10001]={0};
gets(arr);
int len=strlen(arr);
int fast=len-1;
int slow=0;
fast=len-1,从后往前开始遍历数组,并打印;
找字母尾部:首先让 fast 指向数组的尾元素,然后找到从后向前找字母的尾部,当 arr[fast] 不是字母时 fast--,直到指向字母,而后令 slow = fast ,此时 slow 指向字母尾部;
while(fast>=0 && !isalpha(arr[fast]))
{
fast--;
}
slow=fast;
找字母头部:当arr[fast] 是字母时 fast--,直到指向非字母,然后打印 arr[fast+1] 到 arr[slow] 之间的值即可,后面加上分隔符,并且打印;文章来源:https://www.toymoban.com/news/detail-658481.html
while(fast>=0 && isalpha(arr[fast]))
{
fast--;
}
int i=0;
for(i=fast+1;i<=slow;i++)
{
printf("%c",arr[i]);
}
printf(" ");
以上就是这道题的解析,一下是程序源代码:文章来源地址https://www.toymoban.com/news/detail-658481.html
#include <stdio.h>
#include<string.h>
int main() {
char arr[10001]={0};
gets(arr);
int len=strlen(arr);
int fast=len-1;
int slow=0;
while(fast>=0)
{
while(fast>=0 && !isalpha(arr[fast]))
{
fast--;
}
slow=fast;
while(fast>=0 && isalpha(arr[fast]))
{
fast--;
}
int i=0;
for(i=fast+1;i<=slow;i++)
{
printf("%c",arr[i]);
}
printf(" ");
}
return 0;
}
如有不足之处欢迎来补充交流!
完结。。。
到了这里,关于单词倒排(C语言详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!