c++ - 在C++中使用<string,string>或<string,char>映射而不是<char,char>

标签 c++ string map compiler-errors char

我是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()返回intstd::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/

相关文章:

c++ - 这段代码是字节序安全的吗?

SQL:如何获取所有行中列中的所有不同字符

php - MySQL 和 PHP - 多行或连接成 1 行 - 哪个更快?

scala - 如何获取 map 的子集?

c++ - 在 C++ 中迭代 std::map 的键/值

c# - 如何指定 createfilew 函数获取未缓存的结果?

c++ - WebKit CSS 3d 转换在 Snow Leopard 中不起作用

c++ - 针对结束迭代器测试 lower_bound 的返回值

c++ - 整个标题用于前向声明的用途是什么?

php - 将数字转换为excel的字符串