在C++中使用<字符串,字符串>或<字符串,字符>映射而不是<字符,字符>

Using a <string,string> or <string, char> map instead of <char, char> in C++

本文关键字:gt 字符 lt 字符串 映射 C++      更新时间:2023-10-16

我是STL的新手,希望习惯字符串数据类型而不是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');