如何在C++中实现以下(Python伪代码)?

if argv[1].startswith('--foo='):
    foo_value = int(argv[1][len('--foo='):])

(例如,如果argv[1]--foo=98,那么foo_value98。)

更新:我很犹豫要看Boost,因为我只是想对一个简单的小命令行工具做很小的改动(我宁愿不必学习如何链接并使用Boost来小改动)。

最佳答案

使用具有rfind参数的 pos 重载:

std::string s = "tititoto";
if (s.rfind("titi", 0) == 0) {
  // s starts with prefix
}

谁还需要其他东西?纯STL!

许多人误认为这是“向后搜索整个字符串以查找前缀”。这将导致错误的结果(例如string("tititito").rfind("titi")返回2,因此与== 0比较时将返回false)并且效率低下(遍历整个字符串而不只是开始)。但是它没有这样做,因为它将pos参数传递为0,这将搜索限制为仅在该位置或更早的位置匹配。例如:
std::string test = "0123123";
size_t match1 = test.rfind("123");    // returns 4 (rightmost match)
size_t match2 = test.rfind("123", 2); // returns 1 (skipped over later match)
size_t match3 = test.rfind("123", 0); // returns std::string::npos (i.e. not found)

10-05 21:13