读书人

写一个函数对于参数quot;abcquot;与quot;bacquot;回来

发布时间: 2013-07-04 11:45:32 作者: rapoo

写一个函数,对于参数"abc"与"bac"返回同一个数值
不知道有没有这种函数呢
//////////////////////////////
代码示例
int get_integer(const string&);
给函数传入一个字符串,如果字符串大小一样且包含一样的字母,
则返回一模一样的数值

就像这个样子
get_integer("abc")==get_integer("bac");//true
abc与bac长度相等,而且包含有一模一样的字符
则get_integer的返回值相同
"abc","acb","cba"的值也是一样的,
但是对于包含有不同字符的字符串值不会出现重复
[解决办法]
但是对于包含有不同字符的字符串值不会出现重复

这不可能,因为字符串的数量远多于整数的数量
[解决办法]
如果不要求同一字符串每次运行时都获得相同的值的话:
int get_integer( string const & str )
{
static map<string, int> values;
string temp(str);
sort(str.begin(), str.end());
map<string, int>::itearetor where = values.find( temp );
if(where == values.end())
{
where = values.insert(makepair<string const, int>(temp, values.size() ) ).first;
}
return where->second;
}
[/code]
[解决办法]
本质上跟素因子一样
以a =2
b=3
c =5
d=7
e = 11
f = 13
...
相乘的结果就是那个要求的int
但是 跟前面几楼说的int很容易溢出
[解决办法]
压缩了就不能保证唯一性了
素因子法跟自然数已经是11对应了(除了0、1)
即给定字符串能够唯一的确定整数
给定正整数也唯一确定了字符串(当然不计顺序)

读书人网 >C++

热点推荐