每日一题2:反转英文句子
来源:互联网 发布:windows 2003server 编辑:程序博客网 时间:2024/05/21 18:46
反转英文句子的意思是将句子中按顺序排好的单词的顺序颠倒过来,例子如下:
输入: wo shi zhong guo ren
输出: ren guo zhong shi wo
直观的解法是先将每个单词提取出来,然后计算每个单词反转后所的位置,最后将单词填到相应的位置上。这种方案不仅占用辅助空间,并且计算复杂。另一种方案是将整个句子看做一个字符串,先反转字符串字母的顺序(包含空格),然后再一次反转每个单词的字母顺序。反转单词字母的意思是:
输入:wo shi zhong guo ren
输出:ner oug gnohz ihs ow
下面看第二种思路的代码:
#include "stdafx.h"#include <string.h>#include <iostream>#include <vector>using namespace std;void ReverseString(char str[],int start,int end){ for (int i = start,j = end; i < j; ++i,--j) { char c = str[i]; str[i] = str[j]; str[j] = c; }}void ReverseString(char str[]){ int length = strlen(str); ReverseString(str,0,length - 1);}void ReverseSentence(char str[]){ ReverseString(str); vector<int> splitIndex; int length = strlen(str); //记录下单词分隔符的位置(空格),句首放置一个虚拟空格 splitIndex.push_back(-1); for (int i = 0; i < length; ++i) { if(str[i] == ' ') splitIndex.push_back(i); } //句尾放置一个虚拟空格 splitIndex.push_back(length); int count = splitIndex.size() - 1; for (int i = 0; i < count; ++i) { ReverseString(str,splitIndex[i] + 1,splitIndex[i+1] - 1); }}int _tmain(int argc, _TCHAR* argv[]){ char str[] = "wo shi zhong guo ren"; cout<<str<<endl; ReverseSentence(str); cout<<str<<endl; return 0;}
程序运行截图:
该程序只考虑英文字母输入,并且不考虑标点符号,所有单词以空格分开。
1 0
- 每日一题2:反转英文句子
- [python]反转英文句子
- 反转英文句子内单词
- 字符串左旋 VS 反转英文句子
- 每日一题(4) - 反转链表
- [每日练习]C编程实现句子中的单词反转
- 英语句子(每日一句)
- 那些优美的英文句子<一>
- 挑战篇一:英文句子逆序输出
- 句子反转
- 反转句子
- 句子反转
- 句子反转
- 句子反转
- 句子反转
- 反转句子
- 英文句子
- 牛客网几道编程题(一) 统计字符、反转句子、删除公共字符
- static关键字的使用
- 模块[LCD]_Android LCD(二):LCD常用接口原理篇
- ROCK算法
- 大数据真的很牛B吗?不不不,10分钟让你读懂它
- 春闘集中回答―賃上げに広がりを
- 每日一题2:反转英文句子
- c#实现汉字转换全拼
- cmd 删除进程
- java nio--概述
- 怎么理解JAVA中的实例化?
- 【数据科学实战】数据科学补充阅读材料(图书推荐)
- JUnit中assertEquals和assertSame方法的不同
- (非常强大的) ios 常用网址,库,第三方,索引整理合集
- 如果不使用判断操作保证任意一个数如果大于30则为30,否则为原值(SQL中排序时对字段值进行最大限制)