我正在做作业,教授将这项任务作为作业的一部分交给了我们。我对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
}
}
答案 0 :(得分:4)
这可以通过C ++ 17功能std::variant
和std::get_if
完成。
std::variant<int, std::string>
main
中,使用std::get_if
确定已返回的值。 std::get_if
返回指向存储在指向变量中的值的指针,或者在出现错误时返回null指针。
#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直播。
答案 1 :(得分:1)
您需要返回两个对象,并且无法通过重载该函数来完成此操作。
因此您可以使用:
std::pair<int, std::string> search(const std::string&, const std::list<std::string>& l);
或者您可以通过传递第二个对象的引用来返回它:
std::string search(const std::string&, const std::list<std::string>& l, it& index);
C ++ 17中的另一个选项是执行此操作的正确方法:
std::optional<size_t> search(const std::string&, const std::list<std::string>& l);
如果搜索成功,您将得到一个整数,否则将不会得到一个值。返回一个空字符串只是...
答案 2 :(得分:1)
在C ++中这是不可能的,一个函数只能定义一个返回类型。
这里有2种可能的情况:
E.G
struct returnData{
int returnCode;
std::string returnText;
}
returnData myFunc(std::string){}
2可能会将您的搜索字符串用作输入/输出参数,但这比赋值的意义更小,因此我不再赘述。
也有可能返回void *(通用数据),然后将其强制转换为字符串或int,但无法知道应该是哪个。
我真的不知道您的教授究竟期望从这个分配中得到什么,因为从字面上返回基于参数的不同值几乎是不可能的,除非您同时返回它们和忽略它们。
答案 3 :(得分:0)
我看到了一个建议返回结构的答案。用整数和字符串值联合并将其放置为返回类型怎么样
答案 4 :(得分:-1)
您可以返回void *,它将返回您想要的所有内容