hstring.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef HV_STRING_H_
  2. #define HV_STRING_H_
  3. #include <string>
  4. #include <vector>
  5. #include <map>
  6. #include "hbase.h"
  7. using std::string;
  8. typedef std::vector<string> StringList;
  9. // MultiMap
  10. namespace std {
  11. /*
  12. int main() {
  13. std::MultiMap<std::string, std::string> kvs;
  14. kvs["name"] = "hw";
  15. kvs["filename"] = "1.jpg";
  16. kvs["filename"] = "2.jpg";
  17. //kvs.insert(std::pair<std::string,std::string>("name", "hw"));
  18. //kvs.insert(std::pair<std::string,std::string>("filename", "1.jpg"));
  19. //kvs.insert(std::pair<std::string,std::string>("filename", "2.jpg"));
  20. for (auto& pair : kvs) {
  21. printf("%s:%s\n", pair.first.c_str(), pair.second.c_str());
  22. }
  23. auto iter = kvs.find("filename");
  24. if (iter != kvs.end()) {
  25. for (int i = 0; i < kvs.count("filename"); ++i, ++iter) {
  26. printf("%s:%s\n", iter->first.c_str(), iter->second.c_str());
  27. }
  28. }
  29. return 0;
  30. }
  31. */
  32. template<typename Key,typename Value>
  33. class MultiMap : public multimap<Key, Value> {
  34. public:
  35. Value& operator[](Key key) {
  36. auto iter = this->insert(std::pair<Key,Value>(key,Value()));
  37. return (*iter).second;
  38. }
  39. };
  40. }
  41. #ifdef USE_MULTIMAP
  42. #define HMAP std::MultiMap
  43. #else
  44. #define HMAP std::map
  45. #endif
  46. // KeyValue
  47. typedef HMAP<std::string, std::string> KeyValue;
  48. // std::map<std::string, std::string, StringCaseLess>
  49. class StringCaseLess : public std::binary_function<std::string, std::string, bool> {
  50. public:
  51. bool operator()(const std::string& lhs, const std::string& rhs) const {
  52. return stricmp(lhs.c_str(), rhs.c_str()) < 0;
  53. }
  54. };
  55. #define SPACE_CHARS " \t\r\n"
  56. #define PAIR_CHARS "{}[]()<>\"\"\'\'``"
  57. string asprintf(const char* fmt, ...);
  58. // x,y,z
  59. StringList split(const string& str, char delim = ',');
  60. // user=amdin&pswd=123456
  61. KeyValue splitKV(const string& str, char kv_kv = '&', char k_v = '=');
  62. string trim(const string& str, const char* chars = SPACE_CHARS);
  63. string trimL(const string& str, const char* chars = SPACE_CHARS);
  64. string trimR(const string& str, const char* chars = SPACE_CHARS);
  65. string trim_pairs(const string& str, const char* pairs = PAIR_CHARS);
  66. string replace(const string& str, const string& find, const string& rep);
  67. // str=/mnt/share/image/test.jpg
  68. // basename=test.jpg
  69. // dirname=/mnt/share/image
  70. // filename=test
  71. // suffixname=jpg
  72. string basename(const string& str);
  73. string dirname(const string& str);
  74. string filename(const string& str);
  75. string suffixname(const string& str);
  76. #endif // HV_STRING_H_