如何在C++中实现以下(Python伪代码)?
if argv[1].startswith('--foo='):
foo_value = int(argv[1][len('--foo='):])
(例如,如果
argv[1]
是--foo=98
,那么foo_value
是98
。)更新:我很犹豫要看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)