如何将用户定义的字符串转换为整数

时间:2014-12-05 22:22:38

标签: c++

我基本上要求用户输入一个字符串,假设他们输入“ABC”或“DEF”

然后,如果输入ABC,我想设置一个整数= 1,如果输入了DEF,则设置为2。

如果输入了其他内容,那么我希望它说出无效的值。

所以最后,如果输入了有效值,我将把整数分配给1或2。

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main()
{
     string input = "";

// How to get a string/sentence with spaces
cout << "Please enter a valid sentence (with spaces):\n>";
getline(cin, input);
cout << ".\n" << "You entered: " << input << endl << endl;

int m
if(input = ABC)

    return 0;
}

3 个答案:

答案 0 :(得分:0)

非常简单:

#include <iostream>
#include <map>
#include <string>

int main()
{
    std::map<std::string, int> const v { { "ABC", 1 }, { "DEF", 2 } };

    for (std::string line; std::getline(std::cin, line); )
    {
        auto it = v.find(line);

        if (it == v.end())
        {
            std::cout << "Input '" << line << "' is invalid.\n";
        }
        else
        {
            std::cout << "Your input value: " << it->second << "\n";
        }
    }
}

答案 1 :(得分:0)

你的英文规范:

  

如果输入ABC则设置一个特定的整数= 1,如果输入了DEF,则设置为2 [...]如果输入了其他内容,则我希望它表示无效值。

用C ++表示:

if( s == "ABC" ) { x = 1; }
else if( s == "DEF" ) { x = 2; }
else { cout << "Invalid value." << endl; }

如果两个指定的可能性都不成立,即在输出&#34;无效值的情况下。&#34;,则x保留其所具有的值,这就是我解释单词的方式“集”。


在更高的抽象级别,它似乎就像你希望用户指定两个字符串中的一个,即“ABC”或“DEF”,你想要它们作为整数id输入操作后。

然后有两种主要的可能性:

  • 您希望id也指示用户指定其他字符串的情况,例如:这个的共同价值,或

  • 您希望输入操作仅在用户输入两个有效字符串之一时才返回控件。

最后一种情况实际上意味着输入操作必须循环或逻辑上失败。逻辑失败可以表示为例外,或者例如致电std::terminate

所以你看到这里有一系列的可能性,比如简单的“如何将这个英语翻译成C ++”,所需的功能有点指定不足

答案 2 :(得分:-1)

#include <iostream>
#include <map>
#include <string>
#include <initializer_list>

using namespace std;

int main()
{
    const std::map<std::string, int> lookupTable = { {"ABC", 1}, {"DEF", 2} };
    string input = "";
    int m;

    while(true) {
        cout << "Please enter a valid sentence (with spaces):\n>";
        getline(cin, input);
        std::map<std::string, int>::const_iterator it = lookupTable.find(input);
        if (it != lookupTable.end()) {
            m = it->second;
            break;
        }
    }

    cout << "You entered: " << input << endl << endl;
    cout << "m = " << m << endl;
}

如果你想要你的m const,那么第二个解决方案。假设您的编译器支持lambda函数:

#include <iostream>
#include <map>
#include <string>
#include <initializer_list>

using namespace std;

int main()
{
    const std::map<std::string, int> lookupTable = { {"ABC", 1}, {"DEF", 2} };
    string input = "";
    const int m = [&]() {
        while(true) {
            cout << "Please enter a valid sentence (with spaces):\n>";
            getline(cin, input);
            std::map<std::string, int>::const_iterator it = lookupTable.find(input);
            if (it != lookupTable.end())
                return it->second;
        }
    }();

    cout << "You entered: " << input << endl << endl;
    cout << "m = " << m << endl;
}

如果您的编译器不支持上面的地图初始化,那么您可以改为使用:

#include <iostream>
#include <map>
#include <string>

using namespace std;

std::map<std::string, int> initializeMap() {
    std::map<std::string, int> map;
    map["ABC"] = 1;
    map["DEF"] = 2;
    // add whatever else here
    return map;
}

int main()
{
    const std::map<std::string, int> lookupTable = initializeMap();
    string input = "";
    int m;

    while(true) {
        cout << "Please enter a valid sentence (with spaces):\n>";
        getline(cin, input);
        std::map<std::string, int>::const_iterator it = lookupTable.find(input);
        if (it != lookupTable.end()) {
            m = it->second;
            break;
        }
    }

    cout << "You entered: " << input << endl << endl;
    cout << "m = " << m << endl;
}