题目:编写一个单词逆序输出的算法,例如输入"SEE YOU IN ANOTHER LIFE",要求输出"LIFE ANOTHER IN YOU SEE"。
解答:
解法一:只需扫描一遍:
#include
void ReverseWord(constchar* src, char* dest)
{
assert(src != NULL && dest != NULL);
constchar* head = src; //记住头指针
while(*src++);
int count = 0;
for(src -= 2;;src--) //从尾到头遍历
{
if(src == head) //到头部额,退出循环
{
do
{
*dest++ = *src++;
} while(count--);
break;
}
if(*src == ' ') //遇到空格
{
constchar* temp = src + 1;
while(count--)
{
*dest++ = *temp++;
}
*dest++ = ' ';
count = 0;
}
else
{
count++; //计算每个单词的长度
}
}
*dest = '\0';
}
int main()
{
constchar* str = "SEE YOU IN ANOTHER LIFE";
char *dest = newchar[strlen(str) + 1];
ReverseWord(str, dest);
std::cout字符串,将第一个字符和最后一个字符交换,第二个和倒数第二个交换,依次循环。接着进行第二次遍历,对每个单词反转一次,这样每个单词就恢复成原有顺序,得到题目要求的功能了:
#include
char* ReverseWord(constchar* str)
{
assert(str != NULL);
int len = strlen(str);
char* restr = newchar[len + 1];
strcpy(restr, str);
//第一次扫描,头尾反转
for(int i=0, j=len-1; i字符串,一个这个字符串的子串,将第一个字符串反转,但保留子串的顺序不变。例如:
输入:第一个字符串:"See you in another life"
子串:"in"
输出:"efil rehtona in uoy eeS"
解答:一般的方法是先扫描一遍第一个字符串,用stack把它反转,同时记录下子串出现的位置;然后再扫描一遍反转后的字符串,扫描过程中将原来子串再反转,其他的不变,这样就得到答案了。
那么只扫描一遍怎么办呢?只需在扫描的过程中将子串反序压入堆栈;扫描完之后,将堆栈中字符弹出,这样子串就还是原来的顺序了。实现代码如下:
#include
#include
#include
constchar* reverse(constchar* s1, constchar* token)
{
assert(s1 && token);
std::stack stackOne;
constchar* ptoken = token;
constchar* head = s1;
constchar* rear = s1;
while(*head != '\0')
{ while(*head != '\0' && *ptoken == *head) { ptoken++; head++; } if(*ptoken == '\0') //包含字符串token
{
constchar* p;
for(p=head-1; p>=rear; p--) //从尾到头将token存入堆栈
{
stackOne.push(*p);
}
ptoken = token;
rear = head;
}
else//不是分割的字符串
{
stackOne.push(*rear);
head = ++rear;
ptoken = token;
}
}
char* ret = newchar[strlen(s1)+1];
int i = 0;
while(!stackOne.empty()) //非空
{
ret[i++] = stackOne.top();
stackOne.pop();
}
ret[i] = '\0';
return ret;
}
int main()
{
std::cout<<"See you in another life"<<std::endl;
std::cout<<reverse("See you in another life", "in")<<std::endl;
system("pause");
return 0;
}
发表评论
-
WinForm下正则表达式的应用
2012-07-06 09:45 9191.引入命名空间:using System.Text.Re ... -
八个最常用的正则表达式
2012-07-06 09:38 694灵活的使用正则表达式,可以使得程序既简洁,又清晰。因为正则 ... -
基于表的Lua原生支持面向对象编程在GUI中的使用示例
2012-07-06 09:30 1124lua真的有很多神奇的用法,下面是一个基于表的形式实现的对 ... -
图片展示
2012-07-05 20:45 5795 ... -
Flex 4架构的组件开发
2012-07-03 13:44 583Flex 4架构的组件开发 作者:Michael Labr ... -
Flex利用自定义事件使用弹出窗口为DataGrid添加新数据
2012-07-02 12:27 617下面是TitleWindow所有代码: Xml代码 ... -
Flex右键菜单扫盲
2012-07-02 12:27 758怎么添加右键?在 Flex 中,只有应用程序中的顶层组件才 ... -
flex--LineChart
2012-07-02 12:27 605最近工作上用到了linechart,在网上查的资料还是非常 ... -
flex的mask处理
2012-07-02 12:26 743在做公司一个flash播放器时候,需要在一个swf中动态加 ... -
flex datechooser 日期小例子
2012-07-02 12:26 564在这个例子中,我们讲解的是DateChooser 控件,这 ... -
在应用中使用Ext Loader
2012-07-01 10:01 507原文:http://www.sencha.com/b ... -
广州工作2个月!差人的公司可以call我
2012-07-01 10:01 536网名:夜梦惊魂/夜枫设计 姓名:胡军 博客:http ... -
WebKit介绍及总结(一)
2012-07-01 10:01 637一. WebKit简介 ... -
基于push技术的web实时网络管理框架研究
2012-07-01 10:01 4231 引言 基于 web 的网络管理是web 功能和网 ... -
MyEclipse for Spring 8.6: Spring MVC Scaffolding
2012-07-01 10:01 762Scaffolding consists of singl ... -
FLEX和Actionscript开发FLASH游戏8-2-1
2012-06-30 16:28 598FLEX和Actionscript开发FLASH游戏8-2-1 ... -
flex安全沙箱
2012-06-30 16:27 1032flex安全沙箱 2011年02月2 ... -
flex 联机游戏开发 - 五子棋游戏:(二)人性化选择
2012-06-30 16:27 569flex 联机游戏开发 - 五子棋游戏:(二)人性化选择 2 ...
相关推荐
运行程序之后输入任意的字符串,将字符串转化成二进制数字字符串,然后利用LZ78算法实现对二进制字符串压缩解压,最后再恢复原来的字符串
字符串相似度算法 字符串相似度算法 字符串相似度算法 字符串相似度算法 相似度 字符串
关于经典算法--压缩字符串(将字符串内连续重复出现的字符进行压缩),个人的想法
基于Qt写了一个字符串加密的算法模块(有源码),并封装成了动态库,有测试用例。实现的加密解密算法是AES加密对称算法和BlowFish。用户可以直接用动态库,也可以用源码编译。
字符串相似度比较算法,可比较不同长度的任意两个字符串的相似度,以百分比显示。
带通配符的字符串匹配算法,带通配符的字符串匹配算法
字符串匹配算法之Horspool算法(英文原版)
ACM比赛常见算法之BFS算法+back回文字符串 ACM比赛常见算法之BFS算法+back回文字符串 ACM比赛常见算法之BFS算法+back回文字符串 ACM比赛常见算法之BFS算法+back回文字符串 ACM比赛常见算法之BFS算法+back回文...
基于字符串模式匹配算法的病毒感染检测问题——C语言实现。
字符串加密解密算法
比较两个字符串的相似度,利用Levenshein算法计算出两个字符串的最小编辑距离,根据最小编辑距离得出相似度,例如: 字符串1:1234 字符串2:51234,则他们的相似度为:4/5。
主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
用C++实现BM的字符串模式匹配算法,两个代码分别实现坏字符规则和好后缀规则
KMP字符串模式匹配算法ppt,KMP算法是很精妙的算法,同时比较难懂。KMP字符串模式匹配算法ppt
C#实现字符串SHA-256加密算法,非常好用,供大家学习参考。
也就是说,KMP算法是用来解决字符串匹配问题的,从一个主字符串text中寻找一个子字符串(模式字符串)pattern,看这个子串是否在主串中,比如对于text='abaacababcac'和pattern='ababc',子串是包含在主串中的,同时它...
主要介绍了C语言字符串快速压缩算法代码,将字符串中连续出席的重复字母进行压缩,其主要的压缩字段的格式为”字符重复的次数+字符”。有需要的小伙伴参考下吧。
用java查找汉字字符串有多重算法,其中Boyer-Moore是基本算法之一。算法简洁,开发容易,是进行搜索引擎开发的重要算法之一。
KMP字符串匹配算法,一种快速模式匹配算法
Java 实现推荐系统 两个字符串 余弦相似度 算法。