首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于map,为何得不到想要的结果?解决方案

2012-05-20 
关于map,为何得不到想要的结果?急!已知文本test.txt内容如下:-3.284528 zhang-6.09183 wang-5.47386 li-4.

关于map,为何得不到想要的结果?急!
已知文本test.txt内容如下:

-3.284528 zhang
-6.09183 wang
-5.47386 li
-4.658311 ji
-5.719248 kk
-3.468149 se
-5.354424 you
-4.651674 liu
-5.174396 huang
-4.711619 kuang
程序代码如下:

C/C++ code
#include<map>#include<iostream>using namespace std;int main(){    map<char *, float> wf;    FILE *fp=fopen("D:\\test.txt","r");    char pData[128]={0};    int n=0;    while(fgets(pData,128,fp)){        int len=strlen(pData);        pData[len-1]=0;        char *p=pData,*q=pData;        while(*p!=' ')p++;        *p=0;p++;        wf[p]=atof(q);        cout<<p<<" "<<q<<endl;    }    fclose(fp);    cout<<"___________"<<endl;    for(map<char *,float>::iterator it=wf.begin();it!=wf.end();++it){        cout<<it->first<<"  "<<it->second<<endl;    }    return 0;}

为何输出是:
zhang -3.284528
wang -6.09183
li -5.47386
ji -4.658311
kk -5.719248
se -3.468149
you -5.354424
liu -4.651674
huang -5.174396
kuang -4.711619
___________
  -5.47386
kuang -4.71162
Press any key to continue
横线上下的内容不一样呢?

[解决办法]
wf[p]=atof(q);

 悲剧了。。 楼主能说明p是什么? 。。。map<char *, float> wf;的key是地址?
[解决办法]
map<char *, float> wf;
看楼主的意思似乎应该改成:
map<float, char*> wf;

模板参数的第一个是key,第二个是value
[解决办法]
C/C++ code
#include<iostream>using namespace std;int main(){    map<string, float> wf;//换成string    FILE *fp=fopen("D:\\test.txt","r");    char pData[128]={0};    int n=0;    while(fgets(pData,128,fp)){        int len=strlen(pData);        pData[len-1]=0;        char *p=pData,*q=pData;        while(*p!=' ')p++;        *p=0;p++;        wf[p]=atof(q);        cout<<p<<" "<<q<<endl;    }    fclose(fp);    cout<<"___________"<<endl;    for(map<char *,float>::iterator it=wf.begin();it!=wf.end();++it){        cout<<it->first<<"  "<<it->second<<endl;    }    return 0;}
[解决办法]
map<char*, float> char*地址啊,建议用string

热点排行