Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据用户输入在地图中添加某些值? 我试图用C++编写计算器,并希望得到与java相同的结果。在C++中,我怎么能从用户输入的值中打印出和的值,得到与java一样的最终结果呢?请注意我是C++初学者,请原谅我在这个问题上的无知。_C++_Maps - Fatal编程技术网

如何根据用户输入在地图中添加某些值? 我试图用C++编写计算器,并希望得到与java相同的结果。在C++中,我怎么能从用户输入的值中打印出和的值,得到与java一样的最终结果呢?请注意我是C++初学者,请原谅我在这个问题上的无知。

如何根据用户输入在地图中添加某些值? 我试图用C++编写计算器,并希望得到与java相同的结果。在C++中,我怎么能从用户输入的值中打印出和的值,得到与java一样的最终结果呢?请注意我是C++初学者,请原谅我在这个问题上的无知。,c++,maps,C++,Maps,我设法用Java做了一个。在java中,我可以输入多个单词,得到GEMARTIAL,并且我希望在C++中得到相同的结果。 Java代码 package com.company; `import java.util.Hashtable;` `import java.util.Scanner;` public class English_Gematria { public static void main(String[] args) { Hashtable<String,

我设法用Java做了一个。在java中,我可以输入多个单词,得到GEMARTIAL,并且我希望在C++中得到相同的结果。 Java代码

package com.company;
`import java.util.Hashtable;`
`import java.util.Scanner;`

public class English_Gematria {
   public static void main(String[] args) {
     Hashtable<String, Integer> Gematria_Values = new Hashtable<>();
     Gematria_Values.put(" ", 0);
     Gematria_Values.put("A", 1);
     Gematria_Values.put("B", 2);
     Gematria_Values.put("C", 3);
// Goes through rest of alphabet.
System.out.println("What do you want the gematria of?");
Scanner i = new Scanner(System.in);
String Gematria = i.nextline();
int sum = 0;
for (int j = 0; Gematria.length(); j++) {
    sum += Gematria_Values.get(String.valueOf(Gematria.toUpperCase().charAt(j)));
}
System.out.println("The Gematria of " + Gematria + " is " + sum);
#include <iostream>
#include <cmath>
#include <map>

using namespace std;

int main() {
std::map<std::string, std::double_t> Gematria_Values;
Gematria_Values[" "] = 0;
Gematria_Values["A"] = 1;
Gematria_Values["B"] = 2;
Gematria_Values["C"] = 3;
//  Goes through rest of alphabet.
std::string Gematria;
std::cout << "What do you want the gematria of?" << std::endl;
std::cin >> Gematria;
transform(Gematria.begin(), Gematria.end(), Gematria.begin(), ::toupper);
int sum = 0;
for (int i = 0; i < Gematria.length(); i++)
{ 
sum += Gematria_Values.at(Gematria);
}
std::cout << "The Gematria is " << sum;

return 0;

}
当用户输入为(不带引号)“b”或“b”时,我得到

但是,当用户输入为(不带引号)“ab”或“bb”时,我得到

我的问题是:如何获得与Java相同的最终结果?

  • 如果我理解您的问题,那么映射的键类型应该是
    char
    ,而不是string。这同样适用于java版本

  • 我们不使用。老实说,直到现在我才听说过这件事。使用
    double

  • 默认情况下

  • 可以使用初始值设定项列表简化标准容器的初始化(请参见代码)

The Gematria is 1.
The Gematria is 2.
terminate called after throwing an instance of 'std::out_of_range'
  what():  map::at
int main()
{
    std::unordered_map<char, double> Gematria_Values = {
        {' ', 0},
        {'A', 1},
        {'B', 2},
        {'C', 3}
    };

    std::string Gematria;
    std::cout << "What do you want the gematria of?" << std::endl;
    std::cin >> Gematria;
    transform(Gematria.begin(), Gematria.end(), Gematria.begin(), ::toupper);

    int sum = 0;
    for (auto ch : Gematria)
        sum += Gematria_Values[ch];
        
    std::cout << "The Gematria is " << sum;
}
for (auto ch : Gematria)
{
    auto found = Gematria_Values.find(ch);
    if (found == Gematria_Values.end())
    {
        // deal with error
    }
    else
    {
        sum += found->second;
    }
}