不管怎么样,我算救急的,但是还是希望你看了代码后好好的消化一下,真的学到了用到的技巧才不枉我写了几个小时。
因为不想局限于排序和搜索的相关算法中,采用stl。你是一个学生,还是建议你自己实现linklist,array,sort甚至于树结构的map,这样才会有提高。不写是肯定不行的。
看代码先看ReadMe.txt。
我觉得这道题很有趣啊,我也是学了C++没多久。。想试试
已经做好了
#include
#include
#include
#include
using namespace std;
int StringToInt(string &str){
int n=0;
for (int i=0;i{
n=n*10+*(str.c_str()+i)-'0';
}
return n;
}
int main(){
fstream openfile("f:\\bieming.txt",ios_base::in); //读取别名txt
vector> medicine_name;
vector>::iterator iname;
vector::iterator jname;
string names;
string tempnames;
int i=0,j;
do
{
getline(openfile,names);
vectortp;
for (i=0;i{
if (names[i]!=':'&&names[i]!=','&&i!=names.size())
{
tempnames+=names[i];
}else
{
tp.push_back(tempnames);
tempnames="";
}
}
tp.push_back(tempnames);
tempnames="";
medicine_name.push_back(tp);
} while (names!="");
string str;
vectormedicine_list;
vectorweight_list;
vector::iterator it;
vector::iterator nit;
getline(cin,str);
string mtemp;
string ntemp;
for (i=0;i{
if (str[i]!=','&&i!=str.size()-1)
{
if(str[i]<'0'||str[i]>'z')
mtemp+=str[i];
else if(str[i]>='0'&&str[i]<='9'){
ntemp+=str[i];
}
}else
{
medicine_list.push_back(mtemp);
weight_list.push_back(StringToInt(ntemp));
mtemp="";
ntemp="";
}
}
int *p=new int[weight_list.size()];
i=0;
for (nit=weight_list.begin();nit!=weight_list.end();nit++)
{
*(p+i)=*nit;
i++;
}
int temp;
string stemp;
for (int t=weight_list.size()-1;t>0;t--)
{
for (i=1;i<=t;i++)
{
if (p[i]{
temp=p[i];
p[i]=p[i-1];
p[i-1]=temp;
temp=weight_list[i];
weight_list[i]=weight_list[i-1];
weight_list[i-1]=temp;
stemp=medicine_list[i];
medicine_list[i]=medicine_list[i-1];
medicine_list[i-1]=stemp;
}
}
}
for (it=medicine_list.begin();it!=medicine_list.end();it++){
for (i=0;i{
for (j=0;j{
if (*it==medicine_name[i][j])
{
*it=medicine_name[i][0];
}
}
}
}
for (nit=weight_list.begin(),it=medicine_list.begin();it!=medicine_list.end();nit++,it++)
{
cout<<*it<<*nit<<'g'<}
return 0;
}
别告诉你是大学的、、、、、、
我这个高中生都能虐爆你了。。。。。。。
这么简单的双关键字排序都A掉了。。。。
代码自己写吧!
sort 会用吧!
使用数据库不就行了吗?