比较std :: strings的最佳方法

12 c++ string io comparison string-comparison

比较std::strings 的最佳方法是什么?显而易见的方法是if/ else:

std::string input;
std::cin >> input;

if ( input == "blahblahblah" )
{
    // do something.
}

else if ( input == "blahblah" )
{
    // do something else.
}

else if ( input == "blah" )
{
    // do something else yet.
}

// etc. etc. etc.
Run Code Online (Sandbox Code Playgroud)

另一种可能性是使用std::mapswitch/ case.在进行这些比较(例如8,10,12 +)时,最好的方法是什么?

Ben*_*Ben 25

这是使用std :: map的示例.

#include <map>
#include <string>
#include <iostream>
#include <utility>

void first()
{
  std::cout << "first\n";
}

void second()
{
  std::cout << "second\n";
}

void third()
{
  std::cout << "third\n";
}


int main()
{
  typedef void(*StringFunc)();
  std::map<std::string, StringFunc> stringToFuncMap;

  stringToFuncMap.insert(std::make_pair("blah", &first));
  stringToFuncMap.insert(std::make_pair("blahblah", &second));
  stringToFuncMap.insert(std::make_pair("blahblahblah", &third));

  stringToFuncMap["blahblah"]();
  stringToFuncMap["blahblahblah"]();
  stringToFuncMap["blah"]();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

second
third
first
Run Code Online (Sandbox Code Playgroud)

这种方法的好处是:

  • 它很容易扩展.
  • 它会强制您将字符串处理例程分解为单独的函数(按意图编程).
  • 函数查找是O(log n),而你的例子是O(n)

查看使用boost :: function使语法更好一些,特别是对于类成员函数.