我正在尝试构建一个程序,该程序接受用户输入的单词,然后将其转换为数字以使系统正常工作。
int FunctionName(string WordInput)
{
int ReferenceNumber;
if (WordInput.find("Specific Word"))
{
return ReferenceNumber = 0;
}
else if (WordInput.find("Specific Word 2"))
{
return ReferenceNumber = 1;
}
list goes on and has and else to get out.
现在,代码将进入第一个“ if”语句,并且无论我输入“ WordInput”如何,它都将返回0。
不能以这种方式使用“ .find”吗?有没有一种方法可以不必将每个“特定单词”都设置为自己的字符串?
谢谢
答案 0 :(得分:0)
考虑以下示例:
std::string str = "Hello world, what's up today on SO?";
if (str.find("world") != std::string::npos)
return 1;
else if (str.find("what's up") != std::string::npos)
return 2;
else
return 0; // or something
在这里,我们使用std::string::npos
来查看指定的单词在字符串的最后是否存在。如果是,则按照您的要求为将来分配一个值。
答案 1 :(得分:0)
if (WordInput.find("Specific Word"))
std::string::find()
返回类型为size_t
的值。它为您提供搜索词在字符串中的位置。如果找不到搜索字符串,则返回string::npos
。
您可以在此处使用映射,而不是一长串if
和else if
语句。查找会更快,如果使用std::unordered_map
,它将为O(1)(恒定时间)。
因此您的功能可以简化为:
int FunctionName(const std::string &word)
{
//Map of string and reference number
const static std::unordered_map<std::string, int> WordMap =
{ {"one", 1 }, { "two", 2 }, { "three", 3 } };
auto it = WordMap.find(word);
if (it != WordMap.end())
return it->second;
return 0;
}
此处,地图中的每个条目都是一对(string, int)
。如果找到给定的单词,则返回相应的int,否则返回0。
工作版本here。