我基本上要求用户输入一个字符串,假设他们输入“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;
}
答案 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;
}