阿里巴巴国际网站官网入口,杭州手机网站建设公司,杭州网站制,重庆丙图网络科技有限公司题目#xff1a;单词倒排
描述#xff1a;对字符串中的所有单词进行倒排。
说明#xff1a;
1、构成单词的字符只有26个大写或小写英文字母#xff1b;
2、非构成单词的字符均视为单词间隔符#xff1b;
3、要求倒排后的单词间隔符以一个空格表示#xff1b;如果原字…题目单词倒排
描述对字符串中的所有单词进行倒排。
说明
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整体思想是双指针法定义一对快慢指针 fastslow;
2找字母尾部首先让 fast 指向数组的尾元素然后找到从后向前找字母的尾部当 arr[fast] 不是字母时 fast--直到指向字母而后令 slow fast 此时 slow 指向字母尾部
3找字母头部当arr[fast] 是字母时 fast--直到指向非字母然后打印 arr[fast1] 到arr[slow] 之间的值即可后面加上分隔符 思路实现
先输入字符串因为带有空格所以 scanf 不好使使用 gets 运用字符串函数 strlen 算出数组实际个数随后定义双指针 fastslow 并将其赋值
#includestring.h
int main() {char arr[10001]{0};gets(arr);int lenstrlen(arr);int fastlen-1;int slow0;
fastlen-1从后往前开始遍历数组并打印
找字母尾部首先让 fast 指向数组的尾元素然后找到从后向前找字母的尾部当 arr[fast] 不是字母时 fast--直到指向字母而后令 slow fast 此时 slow 指向字母尾部 while(fast0 !isalpha(arr[fast])){fast--;}slowfast;
找字母头部当arr[fast] 是字母时 fast--直到指向非字母然后打印 arr[fast1] 到 arr[slow] 之间的值即可后面加上分隔符并且打印 while(fast0 isalpha(arr[fast])){fast--;}int i0;for(ifast1;islow;i){printf(%c,arr[i]);}printf( );
以上就是这道题的解析一下是程序源代码
#include stdio.h
#includestring.h
int main() {char arr[10001]{0};gets(arr);int lenstrlen(arr);int fastlen-1;int slow0;while(fast0){while(fast0 !isalpha(arr[fast])){fast--;}slowfast;while(fast0 isalpha(arr[fast])){fast--;}int i0;for(ifast1;islow;i){printf(%c,arr[i]);}printf( );}return 0;
}
如有不足之处欢迎来补充交流
完结。。。