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

char不能转化作string

2012-09-10 
char不能转化为string?[codeC/C++][/code]//建立储存作者与相应作品信息的multimap容器//print the infor

char不能转化为string?
[code=C/C++][/code]//建立储存作者与相应作品信息的multimap容器
//print the information in alphabetical order
# include<iostream>
#include<string>
#include<map>
using namespace std;
typedef multimap<string,string> Au_work;
typedef Au_work::iterator Ait;
int main()
{
Au_work work_list;
string sa,sw;
while(1)
{
cout<<"enter author and end all with @"<<endl;
getline(cin,sa);
if(sa=="@")
break;
cout<<"enter the books' name each end by enter,ctrl+z to end all"<<endl;
while(getline(cin,sw))
work_list.insert(make_pair(sa,sw));
cin.clear();
}

//print elemt


for(char cnt='A';cnt !='Z'+1;cnt++)
{
cout<<"AUTHOR NAMES BEGIN WITH "<<"\'"<<cnt<<'\''<<endl;
Ait beg = work_list.lower_bound(cnt),end = work_list.upper_bound((cnt+1));///////出错处
if(beg==end)
cout<<"no record"<<endl;
else
for(;beg!=end;beg++)
cout<<beg->first<<""<<beg->second<<""<<endl;
}
return 0;
}


是不是因为char 不能隐式转化为string而出错吧?
只要是char就不能转化成string?




如下:
d:\humy\10.28author works\10.28author works\main.cpp(44): error C2664: “std::_Tree_iterator<_Mytree> std::_Tree<_Traits>::lower_bound(const std::basic_string<_Elem,std::char_traits<char>,_Ax> &)”: 不能将参数 1 从“char”转换为“const std::basic_string<_Elem,_Traits,_Ax> &”
1> with
1> [
1> _Mytree=std::_Tree_val<std::_Tmap_traits<std::string,std::string,std::less<std::string>,std::allocator<std::pair<const std::string,std::string>>,true>>,
1> _Traits=std::_Tmap_traits<std::string,std::string,std::less<std::string>,std::allocator<std::pair<const std::string,std::string>>,true>,
1> _Elem=char,
1> _Ax=std::allocator<char>
1> ]
1> and
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> 原因如下: 无法从“char”转换为“const std::basic_string<_Elem,_Traits,_Ax>”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> 无构造函数可以接受源类型,或构造函数重载决策不明确
1>d:\humy\10.28author works\10.28author works\main.cpp(44): error C2664: “std::_Tree_iterator<_Mytree> std::_Tree<_Traits>::upper_bound(const std::basic_string<_Elem,std::char_traits<char>,_Ax> &)”: 不能将参数 1 从“int”转换为“const std::basic_string<_Elem,_Traits,_Ax> &”
1> with
1> [
1> _Mytree=std::_Tree_val<std::_Tmap_traits<std::string,std::string,std::less<std::string>,std::allocator<std::pair<const std::string,std::string>>,true>>,
1> _Traits=std::_Tmap_traits<std::string,std::string,std::less<std::string>,std::allocator<std::pair<const std::string,std::string>>,true>,
1> _Elem=char,
1> _Ax=std::allocator<char>
1> ]
1> and
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> 原因如下: 无法从“int”转换为“const std::basic_string<_Elem,_Traits,_Ax>”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,


1> _Ax=std::allocator<char>
1> ]
1> 无构造函数可以接受源类型,或构造函数重载决策不明确
1>
1>生成失败。
1>



[解决办法]
当然不可以 一个是字符一个类
[解决办法]
可以将char*类型的变量转换为string,但是不能将char类型的变量转换为string。
对于你的问题,可以考虑如下:
std::string s[] = { "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
"T", "U", "V", "W", "X", "Y", "Z", "a" };
for (int cnt = 0; cnt < sizeof(s)/sizeof(s[0]); ++cnt) {
cout<<"AUTHOR NAMES BEGIN WITH "<<"\'"<< s[cnt] <<'\''<<endl;
Ait beg = work_list.lower_bound(s[cnt]),end = work_list.upper_bound(s[cnt+1]);
// ...
}
[解决办法]
是这样的,string没有接受单一char类型的构造函数的

但是请注意,string类重载了 char + string 和 string + char 这两个运算,使人有时误以为char 可以转换为string
[解决办法]
可以转换,使用sprintf(string, "%c", char);
[解决办法]
用这个构造函数:
string(size_type n, value_type c);
可以构造一个含有n个字符c的字符串。

work_list.lower_bound(string(1,cnt))

热点排行