关于hash_map和字符串的问题。

zs192001 2010-12-21 03:21:18
我要做的是自然语言处理,目前要做的是将分好的词建立成词典。
因此,需要循环读取分好的词,然后将其加入哈希表中。
测试代码如下:
char* text="黎明黄昏清晨傍晚";
char buf[10];
for(int index=0;index<=12;){
memset(buf, 0, 10);
memcpy(buf,(void *)(text+index), sizeof(char)*4);
mymap[buf]=index;
index+=4;
}
我所预期的结果是哈希表中有如下四个二元组:
(黎明,0)(黄昏,4)(清晨,8)(傍晚,12)
但最后的结果只有
(傍晚,12)
跟踪发现,哈希表一直只有一项,其内容随着buf的变化而变化。
如(黎明,0)->(黄昏,0)->(黄昏,4)等等
我有尝试delete和free()等操作,结果依然如此。
希望大大们帮小的看看是什么问题?感激不尽!卡了有些时间了,有点着急。
...全文
154 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-12-21
  • 打赏
  • 举报
回复
???
zs192001 2010-12-21
  • 打赏
  • 举报
回复
问题我已解决。
解决一,应将数组的初始化放在循环外。
char* text="黎明黄昏清晨傍晚";
char* buf
for(int index=0;index<=12;){
buf=new char[10];
memcpy(buf,(void *)(text+index), sizeof(char)*4);
mymap[buf]=index;index+=4;
}
此时出现新的问题,当text为“黎明黎明清晨傍晚”时,哈希表中有这样两对(黎明,0)(黎明,4)
于是
解决二,改用String
stdext::hash_map<std::string, int> mymap;
std::string text = "黎明黄昏清晨傍晚";
for( int i = 0; i < 4; i++ )
{
// 每次在 text 中,从第 i * 4 个 char,截取 4 个 char
std::string word = text.substr( i * 4, 4 );
mymap[word] = i * 4;
}
问题得以解决。
ddc 2010-12-21
  • 打赏
  • 举报
回复
mymap[buf]=index
buf地址一直没变,当然每次都增加。
你要把那些字符转为字符串,hash索引用字符串类型,这样mymap[黎明]!=mymap[黄昏].

如果单纯改你这个程序,mymap[text+index]做索引就行了,这估计不是你想要的。
zs192001 2010-12-21
  • 打赏
  • 举报
回复
可有办法?
[Quote=引用 1 楼 wozs123 的回复:]

当然那个
[/Quote]

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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