如何快速从某大数组中过滤掉与某小数组中重复的数据?

ZhouQiang 2005-06-14 11:23:37
如何快速从某大数组中过滤掉与某小数组中重复的数据?

大数组:int ArrayB[] = {99, 88,1, 2, 3, 4, 5, 99,88 6, 7, 8, 9, 0, 99, 97} ;
小数组:int ArrayL[] = {99, 88} ;

如何
得到: int ArrayT[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 99, 97} ;
...全文
211 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
defyer007 2005-06-16
  • 打赏
  • 举报
回复
不懂C#
ZhouQiang 2005-06-14
  • 打赏
  • 举报
回复
//我程序中的定义如下,主要是想找到一个更为快速的方法
//类似Replace("你好中国你好", "你好", "")
//但并非Replace那样简单,不是替换字符串

//已知大vector 包含语音数据----"你好中国你好"
vector <UCHAR> vecDemoData ;

//已知小vector 包含语音数据----"你好"
vector <UCHAR> vecMakeData ;

//求vector 需要生成包含语音数据----"中国"
vector <UCHAR> vecTempData ;
defyer007 2005-06-14
  • 打赏
  • 举报
回复
自己写的话,应该先将要过滤的大数组排序,然后可以用一些搜索算法如二分法等进行搜索,找到就去掉
thuers 2005-06-14
  • 打赏
  • 举报
回复
没想出什么好方法~!

关注~!
foochow 2005-06-14
  • 打赏
  • 举报
回复
Microsoft(R) Visual Basic(R) Scripting Edition
Replace 函数 语言参考
起始页 | 版本 2


请参阅


--------------------------------------------------------------------------------

描述
返回字符串,其中指定数目的某子字符串被替换为另一个子字符串。
语法
Replace(expression, find, replacewith[, compare[, count[, start]]])
Replace 函数的语法有以下参数:

参数 描述
expression 必选。 字符串表达式 包含要替代的子字符串。
find 必选。被搜索的子字符串。
replacewith 必选。用于替换的子字符串。
start 可选。expression 中开始搜索子字符串的位置。如果省略,默认值为 1。在和count 关联时必须用
count 可选。执行子字符串替换的数目。如果省略,默认值为 -1,表示进行所有可能的替换。在和 start 关联时必须用。
compare 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,缺省值为 0 ,这意味着必须进行二进制比较。


设置
compare 参数可以有以下值:
常数 值 描述
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。



返回值
Replace 返回以下值:
如果 Replace 返回
expression 为零长度 零长度字符串 ("")。
expression 为 Null 错误。
find 为零长度 expression 的副本。
replacewith 为零长度 expression 的副本,其中删除了所有由 find 参数指定的内容。
start > Len(expression) 零长度字符串。
count 为 0 expression 的副本。


说明
Replace 函数的返回值是经过替换(从由 start 指定的位置开始到 expression 字符串的结尾)后的字符串,而不是原始字符串从开始至结尾的副本。
下面的示例利用 Replace 函数返回字符串:

Dim MyString

'二进制比较从字符串左端开始。返回 "XXYXXPXXY"。
MyString = Replace("XXpXXPXXp", "p", "Y")

'文本比较从第三个字符开始。返回 "YXXYXXY"。
MyString = Replace("XXpXXPXXp", "p", "Y", 3, -1, 1)


--------------------------------------------------------------------------------
(C) 1998 Microsoft Corporation. All rights reserved. Terms of Use.
ZhouQiang 2005-06-14
  • 打赏
  • 举报
回复
对速度要求很高,应用到过滤一个大语音文件中包含的某些语音。
improgrammer 2005-06-14
  • 打赏
  • 举报
回复
跟字符串的replace算法是一样的啊。
replace(ArrayB, ArrayL, "");
daikaiming 2005-06-14
  • 打赏
  • 举报
回复
up
ZhouQiang 2005-06-14
  • 打赏
  • 举报
回复
//下面是我在C#中的实现,但现在我想用C++实现

//------------------------------------------------------------------------
// 语音合成处理函数
public static string TextToSpeech(string VocText)
{
//初始化
...

//变量
string strDemo = "你好" ;
string strMake = "你好中国你好" ;
string wavDemo = Application.StartupPath + "\\Demo.wav" ;
string wavMake = Application.StartupPath + "\\Make.wav" ;
string wavFinal = Application.StartupPath + "\\Final.wav" ;

//删除临时文件
...

//生成演示语音
TxtToWav(strDemo, wavDemo) ;

//生成合成语音
TxtToWav(strMake, wavMake) ;

//演示语音
FileStream fsDemo = new FileStream(wavDemo, FileMode.Open) ;
BinaryReader brDemo = new BinaryReader(fsDemo) ;
byte[] ByteArrayTitle = new byte[44] ;
fsDemo.Seek(0, SeekOrigin.Current) ;
ByteArrayTitle = brDemo.ReadBytes(44) ;
int LengthDemo = (int)fsDemo.Length - 44 ;
byte[] ByteArrayDemo = new byte[LengthDemo] ;
fsDemo.Seek(44, SeekOrigin.Current) ;
ByteArrayDemo = brDemo.ReadBytes((int)fsDemo.Length - 44) ;
fsDemo.Close() ;

//生成语音
FileStream fsMake = new FileStream(wavMake, FileMode.Open) ;
BinaryReader brMake = new BinaryReader(fsMake) ;
int LengthMake = (int)fsMake.Length - 44 ;
byte[] ByteArrayMake = new byte[LengthMake] ;
fsMake.Seek(44, SeekOrigin.Current) ;
ByteArrayMake = brMake.ReadBytes((int)fsMake.Length - 44) ;
fsMake.Close() ;

//以字符串形式替换生成语音中的部分语音
string tmpDemo = Encoding.Unicode.GetString(ByteArrayDemo) ;
string tmpMake = Encoding.Unicode.GetString(ByteArrayMake) ;
string strFinal = tmpMake.Replace(tmpDemo, "") ;

//最终语音
FileStream fsFinal = new FileStream(wavFinal, FileMode.Create) ;
BinaryWriter bwValue = new BinaryWriter(fsFinal) ;
//00-03
fsFinal.Write(ByteArrayTitle, 0, 4) ;
//04-07
bwValue.Write(strFinal.Length * 2 + 36) ; //08-39
fsFinal.Write(ByteArrayTitle, 8, 32) ; //40-43
bwValue.Write(strFinal.Length * 2) ;
//Vioce Data
byte[] ByteArrayFinal = Encoding.Unicode.GetBytes(strFinal) ;
//44-->
fsFinal.Write(ByteArrayFinal, 0, ByteArrayFinal.Length) ; fsFinal.Close() ;

//结束
...

return wavFinal ;
}

64,654

社区成员

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

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