题目:编写一个单词逆序输出的算法,例如输入"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 9361.引入命名空间:using System.Text.Re ... -
八个最常用的正则表达式
2012-07-06 09:38 711灵活的使用正则表达式,可以使得程序既简洁,又清晰。因为正则 ... -
基于表的Lua原生支持面向对象编程在GUI中的使用示例
2012-07-06 09:30 1137lua真的有很多神奇的用法,下面是一个基于表的形式实现的对 ... -
图片展示
2012-07-05 20:45 5945 ... -
Flex 4架构的组件开发
2012-07-03 13:44 599Flex 4架构的组件开发 作者:Michael Labr ... -
Flex利用自定义事件使用弹出窗口为DataGrid添加新数据
2012-07-02 12:27 629下面是TitleWindow所有代码: Xml代码 ... -
Flex右键菜单扫盲
2012-07-02 12:27 775怎么添加右键?在 Flex 中,只有应用程序中的顶层组件才 ... -
flex--LineChart
2012-07-02 12:27 622最近工作上用到了linechart,在网上查的资料还是非常 ... -
flex的mask处理
2012-07-02 12:26 759在做公司一个flash播放器时候,需要在一个swf中动态加 ... -
flex datechooser 日期小例子
2012-07-02 12:26 583在这个例子中,我们讲解的是DateChooser 控件,这 ... -
在应用中使用Ext Loader
2012-07-01 10:01 522原文:http://www.sencha.com/b ... -
广州工作2个月!差人的公司可以call我
2012-07-01 10:01 557网名:夜梦惊魂/夜枫设计 姓名:胡军 博客:http ... -
WebKit介绍及总结(一)
2012-07-01 10:01 652一. WebKit简介 ... -
基于push技术的web实时网络管理框架研究
2012-07-01 10:01 4351 引言 基于 web 的网络管理是web 功能和网 ... -
MyEclipse for Spring 8.6: Spring MVC Scaffolding
2012-07-01 10:01 790Scaffolding consists of singl ... -
FLEX和Actionscript开发FLASH游戏8-2-1
2012-06-30 16:28 613FLEX和Actionscript开发FLASH游戏8-2-1 ... -
flex安全沙箱
2012-06-30 16:27 1056flex安全沙箱 2011年02月2 ... -
flex 联机游戏开发 - 五子棋游戏:(二)人性化选择
2012-06-30 16:27 590flex 联机游戏开发 - 五子棋游戏:(二)人性化选择 2 ...
相关推荐
这种算法的主要思想是创建一个动态更新的字典,字典中的条目是输入字符串中的已编码子串。 在Java环境中实现LZ78算法,首先我们需要理解其基本步骤: 1. 初始化:创建一个空的字典,通常用一个数组或哈希表表示,...
在IT领域,字符串加密算法是保护信息安全的重要手段。本文将深入探讨两个常见的对称加密算法:AES(高级加密标准)和BlowFish,并结合Qt框架介绍如何实现它们的加密和解密功能。同时,我们将讨论如何将这些算法封装...
3. **Boyer-Moore算法**:根据模式字符串的字符出现频率构建跳跃表,使得在目标字符串中可以跳过部分字符,进一步提升效率。时间复杂度在最坏情况下为O(n + m)。 4. **Horspool算法**:是Boyer-Moore算法的简化版本...
本项目聚焦于“链式字符串运算算法”的C语言实现,这是一个关于数据结构和算法的重要话题,对于学习C语言和计算机科学的学生来说极具价值。 链式字符串运算算法的核心在于使用链表数据结构来存储和操作字符串。传统...
### 字符串匹配算法之Horspool算法:深入解析与应用 #### 引言 在计算机科学领域,字符串匹配是一项核心任务,广泛应用于文本编辑、数据检索、模式识别等多个场景。传统的简单匹配算法如逐一比较法往往在面对大...
在IT领域,尤其是在编程与数据处理中,统计字符串中不同字符出现的频度是一个常见的需求。这不仅有助于文本分析,还能应用于密码学、自然语言处理等多个方面。下面,我们将深入探讨这一主题,包括其实现原理、算法...
Levenshtein算法,也称为编辑距离算法,是由俄国数学家Vladimir Levenshtein在1965年提出的一种衡量两个字符串相似度的方法。这个算法基于动态规划原理,可以计算出将一个字符串转换成另一个字符串所需要的最少单...
本实验“基于字符串模式匹配算法的病毒感染检测问题”聚焦于如何利用这些算法来识别潜在的恶意代码,从而预防计算机病毒感染。 《数据结构(C语言版 第2版)》一书由著名计算机科学家严蔚敏编著,书中涵盖了各种...
在信息技术领域,字符串处理是常见的任务之一,其中计算两个字符串的相似度是尤为重要的一个环节。Levenshtein算法,也称为编辑距离算法,就是用于衡量两个字符串之间差异程度的一种方法。本文将深入探讨如何使用...
字符串算法是计算机科学中的一个重要领域,它涉及到对字符串(一串字符序列)进行操作和分析的各种算法。在处理文本、编程语言、数据压缩、搜索、排序等问题时,字符串算法起着至关重要的作用。这里我们将深入探讨...
本篇文章将深入探讨如何使用C++实现Bad Character Rule(坏字符规则)和Good Suffix Rule(好后缀规则)来优化Boyer-Moore(BM)字符串匹配算法。BM算法以其高效的性能在文本搜索、数据挖掘等多个领域广泛应用。 ...
在当今的计算机科学领域,字符串处理是一个极其重要的课题,尤其在算法竞赛如ACM(ACM国际大学生程序设计竞赛)中,高效的字符串处理算法是解决许多问题的关键。本文将介绍一些常见的字符串处理算法:Hash、KMP、...
字符串问题在计算科学中占有重要的地位,涉及字符处理的各种算法和数据结构。常见的字符串处理包括查找、替换、连接、插入和删除等基本操作,而更深入的算法如最长公共子序列(LCS)和最长公共子串(LIS)则是研究字符串...
字符串匹配是计算机科学中一个基础且重要的问题,广泛应用于文本搜索、数据分析等领域。在这个主题中,我们将探讨三种经典的字符串匹配算法:穷举法、KMP(Knuth-Morris-Pratt)算法和BM(Boyer-Moore)算法。 1. *...
js中对字符串加密解密算法
### C++实现定点算法将浮点数转为字符串 #### 概述 本文旨在探讨一种特殊的浮点数转字符串的方法——定点法。该方法通过对IEEE 754标准下的浮点数编码规则进行硬解码,进而实现浮点数到字符串的转换。尽管这种方法...
通过对这35种不同字符串匹配算法的分析,我们不仅了解了各种算法的基本原理和应用场景,还能够根据具体需求选择最适合的算法来解决问题。随着计算机科学的发展,新的算法和技术仍在不断涌现,为解决实际问题提供了更...
一种常见的算法是Levenshtein距离,它计算了将一个字符串转换为另一个字符串所需的最少单字符编辑次数。其他算法,如Longest Common Subsequence(最长公共子序列)和Diff Match Patch,也能提供类似的功能。 2. **...
这个算法主要用于衡量两个字符串之间的差异,即需要进行多少次单字符操作(插入、删除或替换)才能将一个字符串转换为另一个字符串。在文本处理、信息检索、生物信息学等领域有着广泛的应用。 字符串相似度是评估两...