string_utils.h.xml 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <chapter xml:id="string_utils.h">
  2. <title><tt>__vic/string_utils.h</tt></title>
  3. <p>Различные утилиты для работы со строками.</p>
  4. <chapter xml:id="trim">
  5. <title>Набор функций <tt>trim</tt></title>
  6. <code-block lang="C++"><![CDATA[
  7. char *trim(char *str);
  8. char *trim_front(char *str);
  9. char *trim_back(char *str);
  10. char *trim(char *str, char ch);
  11. char *trim_front(char *str, char ch);
  12. char *trim_back(char *str, char ch);
  13. char *trim(char *str, const char *set);
  14. char *trim_front(char *str, const char *set);
  15. char *trim_back(char *str, const char *set);
  16. std::string &trim(std::string &str);
  17. std::string &trim_front(std::string &str);
  18. std::string &trim_back(std::string &str);
  19. std::string &trim(std::string &str, char ch);
  20. std::string &trim_front(std::string &str, char ch);
  21. std::string &trim_back(std::string &str, char ch);
  22. std::string &trim(std::string &str, const char *set);
  23. std::string &trim_front(std::string &str, const char *set);
  24. std::string &trim_back(std::string &str, const char *set);
  25. std::string trimmed(const std::string &str);
  26. std::string trimmed_front(const std::string &str);
  27. std::string trimmed_back(const std::string &str);
  28. std::string trimmed(const std::string &str, char ch);
  29. std::string trimmed_front(const std::string &str, char ch);
  30. std::string trimmed_back(const std::string &str, char ch);
  31. std::string trimmed(const std::string &str, const char *set);
  32. std::string trimmed_front(const std::string &str, const char *set);
  33. std::string trimmed_back(const std::string &str, const char *set);
  34. ]]></code-block>
  35. <p>Набор функций, обрезающих нежелательные символы по краям строки. Обрезаемые
  36. символы можно задавать. Задать можно как одиночный символ <tt>ch</tt>, так и
  37. набор <tt>set</tt>. Если набор не задан, то подразумеваются все пробельные
  38. ASCII-символы. Используются следующие правила именования:</p>
  39. <list style="bulleted">
  40. <item><tt>trim</tt> – обрезает строку с обоих концов,</item>
  41. <item><tt>trim_front</tt> – обрезает строку в начале,</item>
  42. <item><tt>trim_back</tt> – обрезает строку в конце.</item>
  43. </list>
  44. <p>Функции <tt>trim</tt> модифицируют переданную строку и возвращают указатель
  45. или ссылку на неё. Если это по каким-то причинам нежелательно, то следует
  46. использовать набор функций <tt>trimmed</tt>.</p>
  47. <list style="bulleted">
  48. <item><tt>trimmed</tt> – возвращает обрезанную строку в качестве выходного
  49. значения, не модифицируя входной параметр.</item>
  50. </list>
  51. <p>Реализация функций <tt>trim</tt> выполнена с расчётом, что у строки может
  52. не быть символов, подлежащих обрезанию. В подобных случаях никаких модификаций
  53. не производится, и функция возвращает управление сразу после проверки. С точки
  54. зрения эффективности, затраты на такие вызовы минимальны.</p>
  55. <p>Все значения <tt>nullptr</tt> воспринимаются как пустая строка.</p>
  56. <section><title>Примеры</title>
  57. <code-block lang="C++">
  58. char st1[] = "\t value \n";
  59. // CHOICE:
  60. __vic::trim(st1); // result: "value"
  61. __vic::trim_front(st1); // result: "value \n"
  62. __vic::trim_back(st1); // result: "\t value"
  63. std::string st2("...value123");
  64. // CHOICE:
  65. // trim dot chars
  66. __vic::trim_front(st1, '.'); // result: "value123"
  67. // trim all digits
  68. __vic::trim_back(st1, "123456789"); // result: "...value"
  69. </code-block>
  70. </section>
  71. </chapter>
  72. <chapter xml:id="sift">
  73. <title><tt>sift()</tt></title>
  74. <code-block lang="C++"><![CDATA[
  75. char *sift(char *str, const char *trash_chars);
  76. std::string &sift(std::string &str, const char *trash_chars);
  77. ]]></code-block>
  78. <p>Удаляет из строки все символы из указанного набора. Все значения
  79. <tt>nullptr</tt> воспринимаются как пустая строка.</p>
  80. <section><title>Пример</title>
  81. <code-block lang="C++">
  82. char st[] = "..ab.c..d.e.";
  83. __vic::sift(st, ".");
  84. assert(std::strcmp(st, "abcde") == 0);
  85. </code-block>
  86. </section>
  87. </chapter>
  88. <chapter xml:id="sift_if">
  89. <title><tt>sift_if()</tt></title>
  90. <code-block lang="C++"><![CDATA[
  91. template<class Pred>
  92. char *sift(char *str, Pred pred);
  93. template<class Pred>
  94. std::string &sift(std::string &str, Pred pred);
  95. ]]></code-block>
  96. <p>Удаляет из строки все символы, удовлетворяющие предикату <tt>pred</tt>.
  97. Все значения <tt>nullptr</tt> воспринимаются как пустая строка.</p>
  98. </chapter>
  99. <chapter xml:id="pad_front">
  100. <title><tt>pad_front()</tt></title>
  101. <code-block lang="C++"><![CDATA[
  102. std::string &pad_front(std::string &str, size_t size, char pad_ch = ' ');
  103. char *pad_front(char *str, size_t size, char pad_ch = ' ');
  104. ]]></code-block>
  105. <p>Дополняет строку до длины <tt>size</tt> в начале символами
  106. <tt>pad_ch</tt>. Ничего не происходит, если строка уже имеет длину
  107. <tt>size</tt> или большую, либо указатель - null. Возвращает <tt>str</tt>.</p>
  108. </chapter>
  109. <chapter xml:id="pad_back">
  110. <title><tt>pad_back()</tt></title>
  111. <code-block lang="C++"><![CDATA[
  112. std::string &pad_back(std::string &str, size_t size, char pad_ch = ' ');
  113. char *pad_back(char *str, size_t size, char pad_ch = ' ');
  114. ]]></code-block>
  115. <p>Дополняет строку до длины <tt>size</tt> в конце символами
  116. <tt>pad_ch</tt>. Ничего не происходит, если строка уже имеет длину
  117. <tt>size</tt> или большую, либо указатель - null. Возвращает <tt>str</tt>.</p>
  118. </chapter>
  119. <chapter xml:id="starts_with">
  120. <title><tt>starts_with()</tt></title>
  121. <code-block lang="C++"><![CDATA[
  122. bool starts_with(const char *s, char pref);
  123. bool starts_with(const char *s, const char *pref);
  124. bool starts_with(const char *s, const char *pref, size_t pref_len);
  125. #if __cpp_lib_string_view // C++17
  126. bool starts_with(std::string_view s, char pref);
  127. bool starts_with(std::string_view s, std::string_view pref);
  128. bool starts_with(std::string_view s, const char *pref);
  129. #else // until C++17
  130. bool starts_with(const std::string &s, char pref);
  131. bool starts_with(const std::string &s, const char *pref);
  132. bool starts_with(const std::string &s, const std::string &pref);
  133. bool starts_with(const std::string &s, const char *pref, size_t pref_len);
  134. #endif
  135. bool starts_with(const char *s, size_t s_len, char pref);
  136. bool starts_with(const char *s, size_t s_len, const char *pref);
  137. bool starts_with(const char *s, size_t s_len, const char *pref, size_t pref_len);
  138. ]]></code-block>
  139. <p>Возвращает <tt>true</tt>, если строка <tt>s</tt> начинается с указанного
  140. префикса.</p>
  141. </chapter>
  142. <chapter xml:id="ends_with">
  143. <title><tt>ends_with()</tt></title>
  144. <code-block lang="C++"><![CDATA[
  145. #if __cpp_lib_string_view // C++17
  146. bool ends_with(std::string_view s, char suff);
  147. bool ends_with(std::string_view s, std::string_view suff);
  148. #else // until C++17
  149. bool ends_with(const char *s, char suff);
  150. bool ends_with(const char *s, const char *suff);
  151. bool ends_with(const char *s, const char *suff, size_t suff_len);
  152. bool ends_with(const char *s, size_t s_len, const char *suff);
  153. bool ends_with(const std::string &s, char suff);
  154. bool ends_with(const std::string &s, const char *suff);
  155. bool ends_with(const std::string &s, const std::string &suff);
  156. bool ends_with(const std::string &s, const char *suff, size_t suff_len);
  157. #endif
  158. bool ends_with(const char *s, size_t s_len, char suff);
  159. bool ends_with(const char *s, size_t s_len, const char *suff, size_t suff_len);
  160. ]]></code-block>
  161. <p>Возвращает <tt>true</tt>, если строка <tt>s</tt> оканчивается указанным
  162. суффиксом.</p>
  163. </chapter>
  164. </chapter>