作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做一项作业,我的教授将这项任务作为作业的一部分交给了我们。我对 C++ 还是比较陌生,所以有任何帮助。我创建了该函数,但是我不明白他如何在未找到任何内容时返回一个空字符串,但在找到时返回一个整数。在不重载函数的情况下,这有可能吗?现在我只是将函数设置为整数类型,而不是返回空字符串,而是返回 0。
这是作业中的任务。如果您能解释您的解决方案,让像我这样的笨蛋也能理解,我们将不胜感激。
FindWord – 这个成员函数将一个字符串作为参数并在列表。如果列表为空或找不到,则返回空字符串值(“”)。否则,它返回索引的 int 值(例如数组元素编号,如 0、1、2 等)。请记住,== 相等比较运算符适用于作为字符串处理的字符串对象(而不是 char 数据元素)并且您不需要区分大小写。
编辑:这是我目前的代码
int WordList::FindWord(string word){
if ((listSize = 0)){ // return -1 if no list exists;
return -1;
}
else {
for (int i =0;i<listSize;i++){ // run loop to check for word/
if (word == list[i]) // if word is found then return index
return i;
}
return -1; // return -1 if word is not found
}
}
最佳答案
这可以通过 C++17 特性来完成 std::variant
和 std::get_if
.
std::variant<int, std::string>
main
使用 std::get_if
以确定返回了哪些值。 std::get_if
返回指向存储在指向变体中的值的指针或出错时的空指针。
#include <variant>
#include <string>
#include <iostream>
#include <list>
std::variant<int, std::string> strSearch(const std::string& searchStr, const std::list<std::string>& searchList)
{
int i = 0;
for(const auto& s: searchList) {
if(!s.find(searchStr))
return i;
i++;
}
return "";
}
int main()
{
std::list<std::string> strList = {"stack", "stackover", "stackoverflow"};
std::string str = "stackoverflow";
std::variant<int, std::string> v{strSearch(str, strList)};
if(std::get_if<int>(&v))
std::cout << "String found. Index in the List is:" << std::get<int>(v) << '\n';
else
std::cout << "String not found" << '\n';
str = "stackunderflow";
v = strSearch(str, strList);
if(std::get_if<int>(&v))
std::cout << "String found. Index in the List is:" << std::get<int>(v) << '\n';
else
std::cout << "String not found." << '\n';
}
现场观看here .
关于c++ - 如何让一个函数有不同的返回类型? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53590671/
我是一名优秀的程序员,十分优秀!