gpt4 book ai didi

c++ - 如何遍历字符串数组并为不同的字符串应用函数?

转载 作者:可可西里 更新时间:2023-11-01 11:22:25 27 4
gpt4 key购买 nike

好吧,这可能真的是个菜鸟问题,但我希望有一些我还不知道的东西。

我检查一个文件,检查每行有哪个字符串,根据字符串值我为它执行不同的函数(或多个函数)。

我现在是这样做的:

编辑:我需要在 if 内使用 if-else-if 范围之外的变量,更新代码:

string s1 = "used";
string s2 = "in";
string s3 = "functions";

if(str == "something"){
something = process(s1, s2);
}else if(str == "something else"){
something = process(s2, s3);
}else if(str == "something more"){
something = process(s1, s3);
something = process(s1, s2);
}else if(str == "something again"){
// do more stuff
}else if(str == "something different"){
// do more stuff
}else if(str == "something really different"){
// do more stuff
}

我担心这会变得“慢”,如果行很多,我必须重复这些其他内容......

我尝试使用 switch() 语句,但显然它在这里不起作用,这里有类似 switch() 的东西可以使用吗?

最佳答案

如果你只想执行不同的函数,你可以使用从字符串到函数指针或仿函数的映射,比如boost::function。/tr1::function:

void f1() { /* ... */ }
void f2() { /* ... */ }

// ... creating the map:
typedef void (*FuncPtr)();
typedef std::map<std::string, FuncPtr> FuncMap;
FuncMap fnMap;
fnMap["something"] = &f1;
fnMap["something else"] = &f2;

// ... using the map:
FuncMap::const_iterator it = fnMap.find(str);
if (it != fnMap.end()) { // is there an entry for str?
it->second(); // call the function
}

至于传递参数,根据目前给出的详细信息,我可能会将行的未解析的剩余部分或字符串标记列表传递给函数,并让它们按他们认为合适的方式处理:

void f1(const std::vector<std::string>& tokens) { /* ... */ }
// ...

typedef void (*FuncPtr)(const std::vector<std::string>&);
typedef std::map<std::string, FuncPtr> FuncMap;
// ...

std::vector<std::string> tokens = /* ...? */;
FuncMap::const_iterator it = fnMap.find(str);
if (it != fnMap.end()) {
it->second(tokens);
}

您还可以查看 Boost.FunctionTypes 中的解释器示例(headersource file)是否与您的场景相似。

关于c++ - 如何遍历字符串数组并为不同的字符串应用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3030033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com