我是STL的新手,希望习惯于使用字符串数据类型而不是char数据类型。我试图在此代码中将字符串映射到char,但是在第13和14行给出了2个编译错误-“错误:从'char'到'const char *'的无效转换,以及错误:从'int'到的无效转换'const char *'”。如何解决这些错误?
我已经在注释行(使用char,char的映射)中编写了正确的代码,以显示我要使用字符串实现的内容。我认为问题可能出在C++中,字符串不被当作字符数组。
在不使用char数据类型的情况下实现相同功能的最佳方法是什么?
#include <bits/stdc++.h>
using namespace std;
int main()
{
//map<char,char> M;
map<string, char> M;
string S,R;
cin>>S>>R;
for(int i=0;i<26;i++)
{
//M[S[i]]=(char)(i+'a');
//M[(char)toupper(S[i])]=(char)(i+'A');
M[S[i]]=(char)(i+'a');
M[toupper(S[i])]=(char)(i+'A');
}
for(int i=0;i<R.size();i++)
cout<<M[R[i]];
return 0;
}
提前致谢。
最佳答案
S[i]
返回单个char
,而toupper()
返回int
。 std::string
没有本身接受单个char
的构造函数(但确实有一个=
运算符可以接受)或int
。您需要改用以下方式:
// using string(const char* s, size_type count)
char c = S[i];
M[string(&c, 1)] = (char)(i+'a');
c = (char) toupper(c);
M[string(&c, 1)] = (char)(i+'A');
要么:
// using string(size_type count, char ch)
char c = S[i];
M[string(1, c)] = (char)(i+'a');
c = (char) toupper(c);
M[string(1, c)] = (char)(i+'A');
要么:
// using operator=(char ch)
string tmp;
tmp = S[i];
M[tmp] = (char)(i+'a');
tmp = (char) toupper(c);
M[tmp] = (char)(i+'A');
关于c++ - 在C++中使用<string,string>或<string,char>映射而不是<char,char>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26498290/