关于一个字符串比较的问题

santaga 2006-06-29 10:26:27
最近做了一个字典的程序,可以根据英文字符串比较获得中文的字符串。
但是遇到了一种麻烦的情况

例如
"Use %s to move the box"
"使用 %s 来移动箱子。"
这种类型

传进来的英文或许是
"Use hand to move the box"
那么翻译成
"使用 手 来移动箱子"

也可能是
"Use feet to move the box"
"使用 脚 来移动箱子"

我想知道有没有什么高效的方法能够正确的匹配出
Use hand to move the box

Use %s to move the box
类型的字符串

我目前的做法是将字符串按单词拆开
Use hand to move the box
拆成
Use
hand
to
move
the
box

Use %s to move the box
拆成
Use
%s
to
move
the
box

然后比较除%s(索引位置为1)的所有其他位置的单词是否相同来判断
但是这样太慢了,请教达人高效的方法,不胜感激。
...全文
559 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
我啃 2006-06-30
  • 打赏
  • 举报
回复
正则用起来方便点,但是效率比较差,要不自己做个专用的,一般不会很难,当然功能限制以及代码维护比较烦
ayw215 2006-06-29
  • 打赏
  • 举报
回复
呵呵
忘了 有个直接查找替换的函数
rollor_phoe 2006-06-29
  • 打赏
  • 举报
回复
同意楼上的,此乃一一对应的关系,不过这样的话,程序内容不要太多啊!
ayw215 2006-06-29
  • 打赏
  • 举报
回复
你用stl中的map<string,string>试一下
map.first存 hand or feet
map.second存 手or脚
在每次转换时调用find 然后替换
santaga 2006-06-29
  • 打赏
  • 举报
回复
顶一下
hiphopman 2006-06-29
  • 打赏
  • 举报
回复
真有意思真有意思
santaga 2006-06-29
  • 打赏
  • 举报
回复
正则表达式我也考虑过,是个好方法

但是如果这种类型的字符串特别多

Use %s to move the box
Use %s or %s move the box
Press %s to move the box
......

那为每种字符串生成相应的正则表达式好像也挺复杂的
wcj86009 2006-06-29
  • 打赏
  • 举报
回复
学习
bjskyhorse 2006-06-29
  • 打赏
  • 举报
回复
看看。
herman~~ 2006-06-29
  • 打赏
  • 举报
回复
关注
晨星 2006-06-29
  • 打赏
  • 举报
回复
boost库中支持规则表达式的。
当然,规则表达式的好处当然是通用,惹说纯粹的效率,偶也不知道是否比你这个“纯专用”的好,呵呵。
Dong 2006-06-29
  • 打赏
  • 举报
回复
楼主,你应该是使用数据库来作为字典库的吧?那么请使用数据库的“全文搜索”(这个功能在安装时要特别安装才有)。他可以完成你的工作。反正能很好完成想要的就是最好的方法是吗?“不区一格使用编程方式/手法”!!
ayw215 2006-06-29
  • 打赏
  • 举报
回复
我的意思是说,如果遇到
"Use hand to move the box"
"Use feet to move the box"
这这样的字符串,如何才能迅速的确定它们是属于
Use %s to move the box
这个类型的字符串,然后找到
"使用 %s 来移动箱子。"
这个中文字符串,再将%s所代表的hande或者feet放到
"使用 %s 来移动箱子。" 中变成
"使用 hand 来移动箱子。"
"使用 feet 来移动箱子。" (在不翻译hande 和 feet的情况下)
------------------------------------------------------------------------------------
看来我对你的题意理解和你的本来目的有点不符
不过楼上的几位都说都很正确:无论怎么样,你都得把整个字符串都扫描一遍,而且,我不知道你这个程序的最终目的是什么?如果需要处理复杂点的,而与中文的配对不严格的情况时 该怎么处理呢?不明白你到底想干什么。
我说的方法是map的简单应用罢了,很简单的
祝程序调试成功!
KennyLiu 2006-06-29
  • 打赏
  • 举报
回复
无论怎样你都得把所有单词都扫描一遍吧,你可以在扫描的时候把%S先扫描比较,剩下的可以看作是一个字符串,然后就是两个字符串比较。
hiphopman 2006-06-29
  • 打赏
  • 举报
回复
楼主主要要形容的是
“ A %s B %d C %s D ”
如何能快速匹配
“ A XXX B 123 C XXX D ”。

其中的XXX也可能是多个单词组成。与中文英文字典无关。
mathe 2006-06-29
  • 打赏
  • 举报
回复
对的,题目描述的不清楚,不过应该是
Use your hand to move the box
属于可以匹配的.
其实这里根本不需要识别单词,直接对所有字母进行匹配就
可以了
crazy_lazy_pig 2006-06-29
  • 打赏
  • 举报
回复
同意正则表达式思想.

另外, 对于
"Use hand to move the box"
"Use %s to move the box"
这样两句话, 不把所有的单词比较完, 怎么能知道这是属于一个模式的呢? 慢也没办法啊, 不这样就得不到结论啊.

楼主的例子还算简单, 再稍微复杂点呢? 如: "Use your hand to move the box" 是不是属于那个模式呢? 你又将怎么处理"Don't use feet to move the box"这句话?

还是正则表达式可以说的明白点.
sharpdew 2006-06-29
  • 打赏
  • 举报
回复
不管你怎么实现都只是在模仿正则表达式的一小部分功能而已,所以为啥不用正则表达式呢,你可以把常量字符串专门存放到一个地方,写正则表达式子的时候用表达式替换呀。
santaga 2006-06-29
  • 打赏
  • 举报
回复
ayw215()
我没看懂你的意思
你是说
Use hand to move the box 这个字符串中将 hande 替换为 手?
然后将这句话的每个单词的中文意思都一一对比出来?
Use hand to move the box
使用 手 来 移动 箱子




我的意思是说,如果遇到
"Use hand to move the box"
"Use feet to move the box"
这这样的字符串,如何才能迅速的确定它们是属于
Use %s to move the box
这个类型的字符串,然后找到
"使用 %s 来移动箱子。"
这个中文字符串,再将%s所代表的hande或者feet放到
"使用 %s 来移动箱子。" 中变成
"使用 hand 来移动箱子。"
"使用 feet 来移动箱子。" (在不翻译hande 和 feet的情况下)

课程目标:学习Java语言中字符串相关的知识、字符编码常识和正则表达式的使用,并完成案例前导课程:《Java工程师必学系列课程》前4部课程内容:本课程是《Java工程师必学系列课程》的第5部分,主要讲解Java语言中字符串相关知识、字符编码常识和正则表达式的使用。本课程涉及的主要内容可以分为四部分:一、String、StringBuffer和StringBuilder类基本常识、基本原理和使用技巧二、字符编码常识三、Java语言正则表达式的详细语法和使用技巧四、实战案例课程说明:在开发Java程序的过程中,最常用的类莫过于字符串相关的类。可以毫不夸张的说,任何一个Java程序,都离不开对字符串保存和处理。很多学员对字符串的理解只是处于比较粗浅的阶段。殊不知,如果对字符串处理的不好,会影响到软件的运行效率。本课程专门讲解字符串相关的知识,将从字符串的存储方式、底层的运行方式等各方面深入讲解其中的原理和技巧。此外,对字符串进行更高级的处理,又要用到正则表达式的相关知识。正则表达式广泛应用于各种与字符串处理相关的场合。它是一套独立的语言系统,经过几十年的完善和发展,现在已经非常的强大,并且形成了国际标准。各种高级编程语言,都实现了自己的表达式引擎。本课程详细的讲解了Java语言中正则表达式的语法和使用技巧。掌握了正则表达式,对编程水平的提高有非常大的帮助!同时,本课程在最后一部分,安排了非常精彩的、完整的实战案例,通过实战的形式切实帮助学员提高解决具体问题的能力!预期效果:认真学习完本课程,学员可以掌握字符串处理及正则表达式相关的系统知识,并能提高实际的编码水平。环境配置要求:学习本课程需安装JDK1.8或更高版本的JDK,以便程序能正确运行,建议使用IntelliJ IDEA 2019.1.2或更高版本的开发工具。    因有合作协议约束,《穆哥学堂》只提供PDF版本的课件!

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧