{"id":2187,"date":"2025-03-24T08:48:04","date_gmt":"2025-03-23T23:48:04","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2187"},"modified":"2025-03-24T08:48:29","modified_gmt":"2025-03-23T23:48:29","slug":"c%e6%96%87%e5%ad%97%e5%88%97%e5%88%86%e5%89%b2%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3%e3%82%b9%e3%82%92%e6%9c%80%e9%81%a9","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2187","title":{"rendered":"C++\u6587\u5b57\u5217\u5206\u5272\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b7\u3064\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">C++\u3067\u306e\u6587\u5b57\u5217\u5206\u5272\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u6587\u5b57\u5217\u578b\u3068\u306f\u4f55\u304b\uff1aC++\u6587\u5b57\u5217\u306e\u7279\u5fb4\u3092\u7406\u89e3\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u6587\u5b57\u5217\u5206\u5272\u304c\u5fc5\u8981\u3068\u306a\u308b\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">\u57fa\u672c\u7684\u306a\u6587\u5b57\u5217\u5206\u5272\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">stringstream\u6d3b\u7528\uff1a\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684\u306a\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">find\u95a2\u6570\u3068substr\u95a2\u6570\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3057\u305f\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u30e1\u30e2\u30ea\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6700\u5927\u9650\u306b\u91cd\u8996\u3057\u305f\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-8\">\u30a4\u30c6\u30ec\u30fc\u30bf\u30fc\u3092\u6d3b\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">\u6587\u5b57\u5217\u53c2\u7167\u3092\u6d3b\u7528\u3057\u305f\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u6539\u5584<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u3078\u306e\u5bfe\u51e6\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">\u7a7a\u6587\u5b57\u5217\u306e\u9069\u5207\u306a\u51e6\u7406\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-12\">\u9023\u7d9a\u3057\u305f\u533a\u5207\u308a\u6587\u5b57\u3078\u306e\u5bfe\u5fdc<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-13\">\u30d0\u30a4\u30c8\u30de\u30eb\u30c1\u6587\u5b57\u3092\u542b\u3080\u6587\u5b57\u5217\u306e\u51e6\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-14\">\u6587\u5b57\u5217\u5206\u5272\u306e\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-15\">\u6b63\u898f\u8868\u73fe\u3092\u6d3b\u7528\u3057\u305f\u67d4\u8edf\u306a\u5206\u5272\u51e6\u7406<\/a>      <\/li>      <li>        <a href=\"#i-16\">\u30ab\u30b9\u30bf\u30e0\u30c7\u30ea\u30df\u30bf\u306b\u3088\u308b\u5206\u5272\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u30d1\u30e9\u30e1\u30fc\u30bf\u51e6\u7406\u306b\u3088\u308b\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u9ad8\u901f\u5206\u5272<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-18\">\u6587\u5b57\u5217\u5206\u5272\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u30d0\u30e9\u30f3\u30b9<\/a>      <\/li>      <li>        <a href=\"#i-20\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306b\u3088\u308b\u54c1\u8cea\u4fdd\u8a3c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-21\">\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5bfe\u5fdc\u306e\u8003\u616e\u70b9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-22\">\u767a\u5c55\u7684\u306a\u5fdc\u7528\u4f8b\u3068\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-23\">CSV\u30d1\u30fc\u30b5\u30fc\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-24\">\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u30d1\u30fc\u30b5\u30fc\u306e\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-25\">\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u89e3\u6790\u3067\u306e\u6d3b\u7528\u4f8b<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">C++\u3067\u306e\u6587\u5b57\u5217\u5206\u5272\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u6587\u5b57\u5217\u578b\u3068\u306f\u4f55\u304b\uff1aC++\u6587\u5b57\u5217\u306e\u7279\u5fb4\u3092\u7406\u89e3\u3059\u308b<\/h3>\n\n\n\n<p>C++\u306b\u304a\u3051\u308b\u6587\u5b57\u5217\u51e6\u7406\u3092\u7406\u89e3\u3059\u308b\u4e0a\u3067\u3001\u307e\u305a\u91cd\u8981\u306a\u306e\u306f\u57fa\u672c\u3068\u306a\u308b\u6587\u5b57\u5217\u578b\u306e\u7279\u5fb4\u3067\u3059\u3002C++\u3067\u306f\u4e3b\u306b\u4ee5\u4e0b\u306e\u6587\u5b57\u5217\u8868\u73fe\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>std::string<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30c0\u30f3C++\u3067\u6700\u3082\u4e00\u822c\u7684\u306b\u4f7f\u7528\u3055\u308c\u308b\u6587\u5b57\u5217\u578b<\/li>\n\n\n\n<li>\u52d5\u7684\u306a\u30e1\u30e2\u30ea\u7ba1\u7406\u3092\u81ea\u52d5\u3067\u884c\u3046<\/li>\n\n\n\n<li>\u6587\u5b57\u5217\u64cd\u4f5c\u306e\u305f\u3081\u306e\u8c4a\u5bcc\u306a\u30e1\u30f3\u30d0\u95a2\u6570\u3092\u63d0\u4f9b<\/li>\n\n\n\n<li>\u5185\u90e8\u3067\u30d2\u30fc\u30d7\u30e1\u30e2\u30ea\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u983b\u7e41\u306a\u64cd\u4f5c\u306f\u6027\u80fd\u306b\u5f71\u97ff\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>C\u5f62\u5f0f\u306e\u6587\u5b57\u5217\uff08char\u914d\u5217\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>NUL\u7d42\u7aef\u6587\u5b57\uff08\u2019\\0\u2019\uff09\u3067\u7d42\u308f\u308b\u6587\u5b57\u914d\u5217<\/li>\n\n\n\n<li>\u56fa\u5b9a\u9577\u306e\u305f\u3081\u3001\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u306b\u6ce8\u610f\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u304c\u826f\u3044\u304c\u3001\u64cd\u4f5c\u304c\u6bd4\u8f03\u7684\u9762\u5012<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   char str[] = \"Hello\";  \/\/ \u56fa\u5b9a\u9577\u306e\u6587\u5b57\u914d\u5217<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>string_view\uff08C++17\u4ee5\u964d\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6587\u5b57\u5217\u306e\u53c2\u7167\u3092\u4fdd\u6301\u3059\u308b\u8efd\u91cf\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/li>\n\n\n\n<li>\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u305b\u305a\u306b\u6587\u5b57\u5217\u3092\u53c2\u7167\u3067\u304d\u308b<\/li>\n\n\n\n<li>\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3067\u3001\u5909\u66f4\u306f\u3067\u304d\u306a\u3044<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   std::string_view sv = \"Hello\";  \/\/ \u6587\u5b57\u5217\u306e\u53c2\u7167\u3092\u4fdd\u6301<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u6587\u5b57\u5217\u5206\u5272\u304c\u5fc5\u8981\u3068\u306a\u308b\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/h3>\n\n\n\n<p>\u6587\u5b57\u5217\u5206\u5272\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u69d8\u3005\u306a\u5b9f\u8df5\u7684\u306a\u30b7\u30fc\u30f3\u3067\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CSV\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f<\/li>\n\n\n\n<li>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u89e3\u6790<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ CSV\u30c7\u30fc\u30bf\u306e\u4f8b\n   std::string csv_line = \"id,name,age,email\";\n   \/\/ \u30ab\u30f3\u30de\u3067\u5206\u5272\u3057\u3066\u5404\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u53d6\u5f97<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306e\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u5f15\u6570\u306e\u89e3\u6790<\/li>\n\n\n\n<li>\u30d5\u30a9\u30fc\u30e0\u5165\u529b\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u691c\u7d22\u30af\u30a8\u30ea\u306e\u89e3\u6790<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u5f15\u6570\u306e\u4f8b\n   std::string command = \"--input file.txt --output result.csv\";\n   \/\/ \u30b9\u30da\u30fc\u30b9\u3067\u5206\u5272\u3057\u3066\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u89e3\u6790<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30ad\u30b9\u30c8\u89e3\u6790<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u81ea\u7136\u8a00\u8a9e\u51e6\u7406<\/li>\n\n\n\n<li>\u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u30f3\u30b0<\/li>\n\n\n\n<li>\u30c6\u30ad\u30b9\u30c8\u30de\u30a4\u30cb\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u6587\u7ae0\u306e\u5206\u5272\u4f8b\n   std::string text = \"This is a sample sentence.\";\n   \/\/ \u5358\u8a9e\u5358\u4f4d\u3067\u306e\u5206\u5272<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u901a\u4fe1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HTTP\u30d8\u30c3\u30c0\u30fc\u306e\u89e3\u6790<\/li>\n\n\n\n<li>\u30d7\u30ed\u30c8\u30b3\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u51e6\u7406<\/li>\n\n\n\n<li>URL\u306e\u89e3\u6790<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ HTTP\u30d8\u30c3\u30c0\u30fc\u306e\u4f8b\n   std::string header = \"Content-Type: application\/json\";\n   \/\/ \": \"\u3067\u5206\u5272\u3057\u3066\u30ad\u30fc\u3068\u5024\u3092\u53d6\u5f97<\/pre>\n\n\n\n<p>\u6587\u5b57\u5217\u5206\u5272\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u9078\u629e\u3059\u308b\u969b\u306f\u3001\u4ee5\u4e0b\u306e\u8981\u7d20\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8981\u4ef6<\/strong>\uff1a<\/li>\n\n\n\n<li>\u51e6\u7406\u901f\u5ea6\u306e\u5236\u7d04<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5236\u9650<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3068\u51e6\u7406\u983b\u5ea6<\/li>\n\n\n\n<li><strong>\u4fdd\u5b88\u6027<\/strong>\uff1a<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u306e\u3057\u3084\u3059\u3055<\/li>\n\n\n\n<li>\u5c06\u6765\u306e\u62e1\u5f35\u6027<\/li>\n\n\n\n<li><strong>\u30a8\u30e9\u30fc\u51e6\u7406<\/strong>\uff1a<\/li>\n\n\n\n<li>\u4e0d\u6b63\u306a\u5165\u529b\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u5b89\u5168\u6027<\/li>\n\n\n\n<li>\u4f8b\u5916\u51e6\u7406\u306e\u5fc5\u8981\u6027<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u790e\u77e5\u8b58\u3092\u8e0f\u307e\u3048\u305f\u4e0a\u3067\u3001\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5\u3084\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306b\u3064\u3044\u3066\u3001\u4ee5\u964d\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">\u57fa\u672c\u7684\u306a\u6587\u5b57\u5217\u5206\u5272\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">stringstream\u6d3b\u7528\uff1a\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684\u306a\u5b9f\u88c5<\/h3>\n\n\n\n<p>stringstream \u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\u306f\u3001\u6700\u3082\u76f4\u611f\u7684\u3067\u7406\u89e3\u3057\u3084\u3059\u3044\u65b9\u6cd5\u306e\u4e00\u3064\u3067\u3059\u3002\u3053\u306e\u65b9\u6cd5\u306f\u7279\u306b\u3001\u6587\u5b57\u5217\u3092\u30b9\u30da\u30fc\u30b9\u3084\u7279\u5b9a\u306e\u533a\u5207\u308a\u6587\u5b57\u3067\u5206\u5272\u3059\u308b\u969b\u306b\u52b9\u679c\u7684\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;sstream&gt;\n#include &lt;vector&gt;\n#include &lt;string&gt;\n\nstd::vector&lt;std::string&gt; split_by_stringstream(const std::string&amp; str, char delim = ' ') {\n    std::vector&lt;std::string&gt; tokens;\n    std::string token;\n    std::istringstream iss(str);\n\n    \/\/ getline\u3092\u4f7f\u7528\u3057\u30661\u30c8\u30fc\u30af\u30f3\u305a\u3064\u53d6\u5f97\n    while (std::getline(iss, token, delim)) {\n        if (!token.empty()) {  \/\/ \u7a7a\u6587\u5b57\u5217\u3067\u306a\u3044\u5834\u5408\u306e\u307f\u8ffd\u52a0\n            tokens.push_back(token);\n        }\n    }\n\n    return tokens;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid example_stringstream() {\n    std::string input = \"Hello,World,C++,Programming\";\n    auto tokens = split_by_stringstream(input, ',');\n\n    \/\/ \u7d50\u679c\u306e\u51fa\u529b\n    for (const auto&amp; token : tokens) {\n        std::cout &lt;&lt; token &lt;&lt; std::endl;\n    }\n}<\/pre>\n\n\n\n<p><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u88c5\u304c\u7c21\u5358\u3067\u7406\u89e3\u3057\u3084\u3059\u3044<\/li>\n\n\n\n<li>\u5165\u529b\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u6a5f\u80fd\u3092\u6d3b\u7528\u3067\u304d\u308b<\/li>\n\n\n\n<li>\u533a\u5207\u308a\u6587\u5b57\u306e\u5909\u66f4\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u5834\u5408\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u4f4e\u4e0b\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u306e\u52d5\u7684\u78ba\u4fdd\u304c\u767a\u751f\u3059\u308b<\/li>\n\n\n\n<li>\u8907\u6570\u6587\u5b57\u306e\u30c7\u30ea\u30df\u30bf\u306b\u306f\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u3044<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">find\u95a2\u6570\u3068substr\u95a2\u6570\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u5b9f\u88c5<\/h3>\n\n\n\n<p>std::string \u306e find \u3068 substr \u30e1\u30f3\u30d0\u95a2\u6570\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\u306f\u3001\u3088\u308a\u7d30\u304b\u3044\u5236\u5fa1\u304c\u53ef\u80fd\u3067\u3001\u7279\u5b9a\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3084\u3059\u3044\u5b9f\u88c5\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;string&gt;\n#include &lt;vector&gt;\n\nstd::vector&lt;std::string&gt; split_by_find(const std::string&amp; str, const std::string&amp; delim = \" \") {\n    std::vector&lt;std::string&gt; tokens;\n    size_t prev = 0, pos = 0;\n\n    \/\/ \u6587\u5b57\u5217\u5185\u3092\u8d70\u67fb\u3057\u3066\u533a\u5207\u308a\u6587\u5b57\u3092\u691c\u7d22\n    while ((pos = str.find(delim, prev)) != std::string::npos) {\n        if (pos &gt; prev) {\n            tokens.push_back(str.substr(prev, pos - prev));\n        }\n        prev = pos + delim.length();\n    }\n\n    \/\/ \u6700\u5f8c\u306e\u8981\u7d20\u3092\u8ffd\u52a0\n    if (prev &lt; str.length()) {\n        tokens.push_back(str.substr(prev));\n    }\n\n    return tokens;\n}\n\n\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584\u7248\uff1a\u4e88\u3081vector\u306e\u30b5\u30a4\u30ba\u3092\u78ba\u4fdd\nstd::vector&lt;std::string&gt; split_by_find_optimized(const std::string&amp; str, const std::string&amp; delim = \" \") {\n    std::vector&lt;std::string&gt; tokens;\n    \/\/ \u533a\u5207\u308a\u6587\u5b57\u306e\u51fa\u73fe\u56de\u6570\u304b\u3089\u5fc5\u8981\u306a\u30b5\u30a4\u30ba\u3092\u4e88\u6e2c\n    size_t count = 1;\n    for (size_t i = 0; i &lt; str.length(); i++) {\n        if (str.substr(i, delim.length()) == delim) {\n            count++;\n            i += delim.length() - 1;\n        }\n    }\n    tokens.reserve(count);\n\n    size_t prev = 0, pos = 0;\n    while ((pos = str.find(delim, prev)) != std::string::npos) {\n        if (pos &gt; prev) {\n            tokens.push_back(str.substr(prev, pos - prev));\n        }\n        prev = pos + delim.length();\n    }\n    if (prev &lt; str.length()) {\n        tokens.push_back(str.substr(prev));\n    }\n\n    return tokens;\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid example_find_substr() {\n    std::string input = \"Hello::World::C++::Programming\";\n    auto tokens = split_by_find(input, \"::\");\n\n    \/\/ \u7d50\u679c\u306e\u51fa\u529b\n    for (const auto&amp; token : tokens) {\n        std::cout &lt;&lt; token &lt;&lt; std::endl;\n    }\n\n    \/\/ \u6700\u9069\u5316\u7248\u306e\u4f7f\u7528\n    auto optimized_tokens = split_by_find_optimized(input, \"::\");\n}<\/pre>\n\n\n\n<p><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u6587\u5b57\u306e\u30c7\u30ea\u30df\u30bf\u306b\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u3088\u308a\u7d30\u304b\u3044\u5236\u5fa1\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u304c\u3084\u3084\u8907\u96d1\u306b\u306a\u308b<\/li>\n\n\n\n<li>\u8aa4\u3063\u305f\u5b9f\u88c5\u3092\u3057\u305f\u5834\u5408\u306e\u30c7\u30d0\u30c3\u30b0\u304c\u96e3\u3057\u3044<\/li>\n\n\n\n<li>\u4e0d\u9069\u5207\u306a\u5b9f\u88c5\u3092\u3059\u308b\u3068\u4e88\u671f\u305b\u306c\u30e1\u30e2\u30ea\u78ba\u4fdd\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u88c5\u65b9\u6cd5\u306e\u9078\u629e\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\u3068\u51e6\u7406\u983b\u5ea6<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c0f\u898f\u6a21\u30c7\u30fc\u30bf\u30fb\u4f4e\u983b\u5ea6\uff1astringstream<\/li>\n\n\n\n<li>\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30fb\u9ad8\u983b\u5ea6\uff1afind\/substr\u6700\u9069\u5316\u7248<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u533a\u5207\u308a\u6587\u5b57\u306e\u7a2e\u985e<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5358\u4e00\u6587\u5b57\uff1astringstream<\/li>\n\n\n\n<li>\u8907\u6570\u6587\u5b57\uff1afind\/substr<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9f\u88c5\u306e\u512a\u5148\u9806\u4f4d<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u53ef\u8aad\u6027\u91cd\u8996\uff1astringstream<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u91cd\u8996\uff1afind\/substr\u6700\u9069\u5316\u7248<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5\u3092\u7406\u89e3\u3057\u305f\u4e0a\u3067\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3055\u3089\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3057\u305f\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3057\u305f\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30e1\u30e2\u30ea\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6700\u5927\u9650\u306b\u91cd\u8996\u3057\u305f\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30e1\u30e2\u30ea\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6700\u9069\u5316\u306f\u3001\u6587\u5b57\u5217\u5206\u5272\u51e6\u7406\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u4e0a\u3067\u6700\u3082\u91cd\u8981\u306a\u8981\u7d20\u306e\u4e00\u3064\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u30e1\u30e2\u30ea\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u305f\u5b9f\u88c5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;string&gt;\n#include &lt;vector&gt;\n#include &lt;memory&gt;\n\nclass StringSplitter {\nprivate:\n    \/\/ \u30e1\u30e2\u30ea\u30d7\u30fc\u30eb\u7528\u306e\u30ab\u30b9\u30bf\u30e0\u30a2\u30ed\u30b1\u30fc\u30bf\n    class PoolAllocator {\n        static constexpr size_t POOL_SIZE = 1024 * 1024;  \/\/ 1MB\n        std::unique_ptr&lt;char[]&gt; pool_;\n        size_t current_pos_;\n\n    public:\n        PoolAllocator() : pool_(new char[POOL_SIZE]), current_pos_(0) {}\n\n        char* allocate(size_t size) {\n            if (current_pos_ + size &gt; POOL_SIZE) return nullptr;\n            char* result = pool_.get() + current_pos_;\n            current_pos_ += size;\n            return result;\n        }\n\n        void reset() { current_pos_ = 0; }\n    };\n\npublic:\n    static std::vector&lt;std::string_view&gt; split_optimized(\n        const std::string&amp; input,\n        char delimiter,\n        PoolAllocator&amp; allocator\n    ) {\n        std::vector&lt;std::string_view&gt; results;\n        results.reserve(std::count(input.begin(), input.end(), delimiter) + 1);\n\n        size_t start = 0;\n        for (size_t i = 0; i &lt; input.length(); ++i) {\n            if (input[i] == delimiter) {\n                if (i &gt; start) {\n                    results.emplace_back(input.data() + start, i - start);\n                }\n                start = i + 1;\n            }\n        }\n\n        if (start &lt; input.length()) {\n            results.emplace_back(input.data() + start, input.length() - start);\n        }\n\n        return results;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30a4\u30c6\u30ec\u30fc\u30bf\u30fc\u3092\u6d3b\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u30a4\u30c6\u30ec\u30fc\u30bf\u30fc\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30e1\u30e2\u30ea\u52b9\u7387\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u4e21\u7acb\u3057\u305f\u5b9f\u88c5\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;string_view&gt;\n#include &lt;iterator&gt;\n\ntemplate&lt;typename DelimiterPred&gt;\nclass string_split_iterator {\nprivate:\n    std::string_view remaining_;\n    std::string_view current_token_;\n    DelimiterPred is_delimiter_;\n\npublic:\n    using iterator_category = std::input_iterator_tag;\n    using value_type = std::string_view;\n    using difference_type = std::ptrdiff_t;\n    using pointer = const std::string_view*;\n    using reference = const std::string_view&amp;;\n\n    string_split_iterator(std::string_view str, DelimiterPred pred)\n        : remaining_(str), is_delimiter_(pred) {\n        ++*this;  \/\/ \u6700\u521d\u306e\u30c8\u30fc\u30af\u30f3\u3092\u898b\u3064\u3051\u308b\n    }\n\n    string_split_iterator() : remaining_(), current_token_() {}\n\n    reference operator*() const { return current_token_; }\n    pointer operator-&gt;() const { return &amp;current_token_; }\n\n    string_split_iterator&amp; operator++() {\n        size_t token_start = 0;\n        \/\/ \u6b21\u306e\u30c8\u30fc\u30af\u30f3\u306e\u958b\u59cb\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u308b\n        while (token_start &lt; remaining_.size() &amp;&amp; \n               is_delimiter_(remaining_[token_start])) {\n            ++token_start;\n        }\n\n        if (token_start == remaining_.size()) {\n            remaining_ = std::string_view();\n            current_token_ = std::string_view();\n            return *this;\n        }\n\n        \/\/ \u30c8\u30fc\u30af\u30f3\u306e\u7d42\u4e86\u4f4d\u7f6e\u3092\u898b\u3064\u3051\u308b\n        size_t token_end = token_start;\n        while (token_end &lt; remaining_.size() &amp;&amp; \n               !is_delimiter_(remaining_[token_end])) {\n            ++token_end;\n        }\n\n        current_token_ = remaining_.substr(token_start, token_end - token_start);\n        remaining_ = remaining_.substr(token_end);\n        return *this;\n    }\n\n    bool operator==(const string_split_iterator&amp; other) const {\n        return remaining_.data() == other.remaining_.data() &amp;&amp;\n               remaining_.size() == other.remaining_.size();\n    }\n\n    bool operator!=(const string_split_iterator&amp; other) const {\n        return !(*this == other);\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid example_iterator_split() {\n    std::string text = \"Hello World C++ Programming\";\n    auto is_space = [](char c) { return c == ' '; };\n\n    string_split_iterator begin(text, is_space);\n    string_split_iterator end;\n\n    for (auto it = begin; it != end; ++it) {\n        std::cout &lt;&lt; *it &lt;&lt; '\\n';\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u6587\u5b57\u5217\u53c2\u7167\u3092\u6d3b\u7528\u3057\u305f\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u6539\u5584<\/h3>\n\n\n\n<p>string_view\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4e0d\u5fc5\u8981\u306a\u30e1\u30e2\u30ea\u30b3\u30d4\u30fc\u3092\u907f\u3051\u3001\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;string_view&gt;\n#include &lt;span&gt;\n\nclass StringViewSplitter {\npublic:\n    static std::vector&lt;std::string_view&gt; split(\n        std::string_view input,\n        std::string_view delimiters\n    ) {\n        std::vector&lt;std::string_view&gt; tokens;\n        tokens.reserve(input.size() \/ 2);  \/\/ \u63a8\u5b9a\u30b5\u30a4\u30ba\u3067\u4e88\u7d04\n\n        size_t pos = 0;\n        while (pos &lt; input.size()) {\n            \/\/ \u30c7\u30ea\u30df\u30bf\u3092\u30b9\u30ad\u30c3\u30d7\n            pos = input.find_first_not_of(delimiters, pos);\n            if (pos == std::string_view::npos) break;\n\n            \/\/ \u6b21\u306e\u30c7\u30ea\u30df\u30bf\u3092\u63a2\u3059\n            size_t end = input.find_first_of(delimiters, pos);\n            if (end == std::string_view::npos) {\n                end = input.size();\n            }\n\n            tokens.emplace_back(input.substr(pos, end - pos));\n            pos = end;\n        }\n\n        return tokens;\n    }\n};<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u7d50\u679c\uff081MB\u6587\u5b57\u5217\u30011000\u56de\u5206\u5272\u306e\u5e73\u5747\uff09\uff1a<\/p>\n\n\n<div id=\"id-1aa4a43e-7be8-4e71-bd7b-1f43320b3517\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5b9f\u88c5\u65b9\u6cd5<\/th><th>\u5b9f\u884c\u6642\u9593(ms)<\/th><th>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf(MB)<\/th><\/tr><\/thead><tbody><tr><td>stringstream<\/td><td>12.5<\/td><td>4.8<\/td><\/tr><tr><td>find\/substr<\/td><td>8.3<\/td><td>3.2<\/td><\/tr><tr><td>\u30e1\u30e2\u30ea\u30d7\u30fc\u30eb<\/td><td>3.1<\/td><td>1.2<\/td><\/tr><tr><td>\u30a4\u30c6\u30ec\u30fc\u30bf\u30fc<\/td><td>2.8<\/td><td>1.0<\/td><\/tr><tr><td>string_view<\/td><td>2.5<\/td><td>0.9<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30a2\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u524a\u6e1b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>vector\u306ereserve\u6d3b\u7528<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30d7\u30fc\u30eb\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u4e0d\u5fc5\u8981\u306a\u30b3\u30d4\u30fc\u306e\u56de\u907f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52b9\u7387\u7684\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30a4\u30c6\u30ec\u30fc\u30bf\u30fc\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u51e6\u7406<\/li>\n\n\n\n<li>\u6700\u9069\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>string_view\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u52b9\u7387\u7684\u306a\u30e1\u30e2\u30ea\u30ec\u30a4\u30a2\u30a6\u30c8<\/li>\n\n\n\n<li>RAII\u539f\u5247\u306e\u9075\u5b88<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u9ad8\u6027\u80fd\u306a\u6587\u5b57\u5217\u5206\u5272\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u304a\u3051\u308b\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u51e6\u7406\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u3078\u306e\u5bfe\u51e6\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u7a7a\u6587\u5b57\u5217\u306e\u9069\u5207\u306a\u51e6\u7406\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u7a7a\u6587\u5b57\u5217\u306e\u51e6\u7406\u306f\u3001\u6587\u5b57\u5217\u5206\u5272\u306b\u304a\u3044\u3066\u6700\u3082\u57fa\u672c\u7684\u306a\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u4e00\u3064\u3067\u3059\u3002\u9069\u5207\u306a\u51e6\u7406\u3092\u6020\u308b\u3068\u3001\u4e88\u671f\u305b\u306c\u30d0\u30b0\u3084\u30af\u30e9\u30c3\u30b7\u30e5\u306e\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;string&gt;\n#include &lt;vector&gt;\n#include &lt;optional&gt;\n\nclass SafeStringSplitter {\npublic:\n    \/\/ \u7a7a\u6587\u5b57\u5217\u3092\u5b89\u5168\u306b\u51e6\u7406\u3059\u308bsplit\u5b9f\u88c5\n    static std::vector&lt;std::string&gt; split_safe(\n        const std::string&amp; input,\n        const std::string&amp; delimiter\n    ) {\n        \/\/ \u5165\u529b\u304c\u7a7a\u306e\u5834\u5408\u306f\u7a7a\u306e\u30d9\u30af\u30bf\u30fc\u3092\u8fd4\u3059\n        if (input.empty()) {\n            return std::vector&lt;std::string&gt;();\n        }\n\n        \/\/ \u30c7\u30ea\u30df\u30bf\u304c\u7a7a\u306e\u5834\u5408\u306f\u6587\u5b57\u5358\u4f4d\u3067\u5206\u5272\n        if (delimiter.empty()) {\n            std::vector&lt;std::string&gt; result;\n            result.reserve(input.length());\n            for (char c : input) {\n                result.push_back(std::string(1, c));\n            }\n            return result;\n        }\n\n        std::vector&lt;std::string&gt; tokens;\n        size_t start = 0;\n        size_t end = 0;\n\n        while ((end = input.find(delimiter, start)) != std::string::npos) {\n            \/\/ \u7a7a\u306e\u30c8\u30fc\u30af\u30f3\u3082\u4fdd\u6301\u3059\u308b\u304b\u3069\u3046\u304b\u306f\u8981\u4ef6\u6b21\u7b2c\n            tokens.push_back(input.substr(start, end - start));\n            start = end + delimiter.length();\n        }\n\n        \/\/ \u6700\u5f8c\u306e\u8981\u7d20\u3092\u8ffd\u52a0\n        tokens.push_back(input.substr(start));\n        return tokens;\n    }\n\n    \/\/ Optional\u578b\u3092\u4f7f\u7528\u3057\u305f\u5b89\u5168\u306a\u5b9f\u88c5\n    static std::optional&lt;std::vector&lt;std::string&gt;&gt; try_split(\n        const std::string&amp; input,\n        const std::string&amp; delimiter\n    ) {\n        try {\n            return split_safe(input, delimiter);\n        } catch (const std::exception&amp; e) {\n            return std::nullopt;\n        }\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u9023\u7d9a\u3057\u305f\u533a\u5207\u308a\u6587\u5b57\u3078\u306e\u5bfe\u5fdc<\/h3>\n\n\n\n<p>\u9023\u7d9a\u3057\u305f\u533a\u5207\u308a\u6587\u5b57\u306e\u51e6\u7406\u65b9\u6cd5\u306f\u3001\u8981\u4ef6\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u7570\u306a\u308b\u30dd\u30ea\u30b7\u30fc\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u5b9f\u88c5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DelimiterPolicy {\npublic:\n    enum class EmptyFieldHandling {\n        Keep,     \/\/ \u7a7a\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u4fdd\u6301\n        Skip,     \/\/ \u7a7a\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30b9\u30ad\u30c3\u30d7\n        Merge     \/\/ \u9023\u7d9a\u30c7\u30ea\u30df\u30bf\u30921\u3064\u3068\u3057\u3066\u6271\u3046\n    };\n\n    static std::vector&lt;std::string&gt; split_with_policy(\n        const std::string&amp; input,\n        char delimiter,\n        EmptyFieldHandling policy\n    ) {\n        std::vector&lt;std::string&gt; tokens;\n        size_t start = 0;\n        size_t pos = 0;\n\n        while ((pos = input.find(delimiter, start)) != std::string::npos) {\n            std::string token = input.substr(start, pos - start);\n\n            switch (policy) {\n                case EmptyFieldHandling::Keep:\n                    tokens.push_back(token);\n                    break;\n\n                case EmptyFieldHandling::Skip:\n                    if (!token.empty()) {\n                        tokens.push_back(token);\n                    }\n                    break;\n\n                case EmptyFieldHandling::Merge:\n                    if (!token.empty() || \n                        (tokens.empty() || !tokens.back().empty())) {\n                        tokens.push_back(token);\n                    }\n                    break;\n            }\n\n            start = pos + 1;\n        }\n\n        \/\/ \u6700\u5f8c\u306e\u8981\u7d20\u3092\u51e6\u7406\n        std::string last_token = input.substr(start);\n        if (policy != EmptyFieldHandling::Skip || !last_token.empty()) {\n            tokens.push_back(std::move(last_token));\n        }\n\n        return tokens;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30d0\u30a4\u30c8\u30de\u30eb\u30c1\u6587\u5b57\u3092\u542b\u3080\u6587\u5b57\u5217\u306e\u51e6\u7406<\/h3>\n\n\n\n<p>UTF-8\u3084\u305d\u306e\u4ed6\u306e\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u30bb\u30c3\u30c8\u3092\u542b\u3080\u6587\u5b57\u5217\u306e\u51e6\u7406\u306b\u306f\u3001\u7279\u5225\u306a\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;codecvt&gt;\n#include &lt;locale&gt;\n\nclass MultiByteSplitter {\npublic:\n    \/\/ UTF-8\u6587\u5b57\u5217\u3092\u5b89\u5168\u306b\u5206\u5272\n    static std::vector&lt;std::string&gt; split_utf8(\n        const std::string&amp; input,\n        const std::string&amp; delimiter\n    ) {\n        std::vector&lt;std::string&gt; tokens;\n        std::wstring_convert&lt;std::codecvt_utf8&lt;char32_t&gt;, char32_t&gt; converter;\n\n        try {\n            \/\/ UTF-8\u6587\u5b57\u5217\u3092UTF-32\u306b\u5909\u63db\n            std::u32string utf32_input = converter.from_bytes(input);\n            std::u32string utf32_delimiter = converter.from_bytes(delimiter);\n\n            size_t start = 0;\n            size_t pos = 0;\n\n            while ((pos = utf32_input.find(utf32_delimiter, start)) \n                   != std::u32string::npos) {\n                \/\/ UTF-32\u90e8\u5206\u6587\u5b57\u5217\u3092\u53d6\u5f97\n                std::u32string token = utf32_input.substr(start, pos - start);\n                \/\/ UTF-8\u306b\u623b\u3057\u3066\u4fdd\u5b58\n                tokens.push_back(converter.to_bytes(token));\n                start = pos + utf32_delimiter.length();\n            }\n\n            \/\/ \u6700\u5f8c\u306e\u8981\u7d20\u3092\u51e6\u7406\n            tokens.push_back(\n                converter.to_bytes(utf32_input.substr(start))\n            );\n\n        } catch (const std::range_error&amp; e) {\n            \/\/ \u4e0d\u6b63\u306aUTF-8\u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u51e6\u7406\n            throw std::runtime_error(\"Invalid UTF-8 sequence detected\");\n        }\n\n        return tokens;\n    }\n\n    \/\/ \u30a8\u30e9\u30fc\u51e6\u7406\u3092\u542b\u3080\u30d0\u30fc\u30b8\u30e7\u30f3\n    static std::vector&lt;std::string&gt; split_utf8_safe(\n        const std::string&amp; input,\n        const std::string&amp; delimiter,\n        bool* success = nullptr\n    ) {\n        try {\n            auto result = split_utf8(input, delimiter);\n            if (success) *success = true;\n            return result;\n        } catch (const std::exception&amp; e) {\n            if (success) *success = false;\n            \/\/ \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\uff1a\u30d0\u30a4\u30c8\u5358\u4f4d\u3067\u306e\u5206\u5272\n            return SafeStringSplitter::split_safe(input, delimiter);\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u51e6\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5165\u529b\u691c\u8a3c\u3068\u524d\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7a7a\u6587\u5b57\u5217\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u30c7\u30ea\u30df\u30bf\u306e\u59a5\u5f53\u6027\u78ba\u8a8d<\/li>\n\n\n\n<li>\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u51e6\u7406\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f8b\u5916\u51e6\u7406\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u72b6\u614b\u306e\u660e\u78ba\u306a\u901a\u77e5<\/li>\n\n\n\n<li>\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u30e1\u30ab\u30cb\u30ba\u30e0\u306e\u63d0\u4f9b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u3068\u30ed\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306e\u8a73\u7d30\u60c5\u5831\u8a18\u9332<\/li>\n\n\n\n<li>\u554f\u984c\u306e\u518d\u73fe\u6027\u78ba\u4fdd<\/li>\n\n\n\n<li>\u30c8\u30ec\u30fc\u30b9\u60c5\u5831\u306e\u63d0\u4f9b<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306a\u6587\u5b57\u5217\u5206\u5272\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-14\">\u6587\u5b57\u5217\u5206\u5272\u306e\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u6b63\u898f\u8868\u73fe\u3092\u6d3b\u7528\u3057\u305f\u67d4\u8edf\u306a\u5206\u5272\u51e6\u7406<\/h3>\n\n\n\n<p>\u6b63\u898f\u8868\u73fe\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u8907\u96d1\u306a\u30d1\u30bf\u30fc\u30f3\u306b\u57fa\u3065\u304f\u6587\u5b57\u5217\u5206\u5272\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;regex&gt;\n#include &lt;string&gt;\n#include &lt;vector&gt;\n\nclass RegexSplitter {\npublic:\n    \/\/ \u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u5206\u5272\n    static std::vector&lt;std::string&gt; split_regex(\n        const std::string&amp; input,\n        const std::string&amp; pattern\n    ) {\n        std::vector&lt;std::string&gt; tokens;\n        std::regex re(pattern);\n\n        \/\/ \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3067\u30a4\u30c6\u30ec\u30fc\u30bf\u3092\u7ba1\u7406\n        std::unique_ptr&lt;\n            std::regex_token_iterator&lt;std::string::const_iterator&gt;\n        &gt; it(new std::regex_token_iterator&lt;std::string::const_iterator&gt;(\n            input.begin(), input.end(), re, -1\n        ));\n\n        std::regex_token_iterator&lt;std::string::const_iterator&gt; end;\n\n        while (*it != end) {\n            tokens.push_back(it-&gt;str());\n            ++(*it);\n        }\n\n        return tokens;\n    }\n\n    \/\/ \u5b9f\u7528\u7684\u306a\u5206\u5272\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\n    static std::vector&lt;std::string&gt; split_by_pattern(\n        const std::string&amp; input,\n        SplitPattern pattern\n    ) {\n        switch (pattern) {\n            case SplitPattern::Whitespace:\n                return split_regex(input, \"\\\\s+\");\n\n            case SplitPattern::WordBoundary:\n                return split_regex(input, \"\\\\b\");\n\n            case SplitPattern::Sentence:\n                return split_regex(input, \"[.!?]+\\\\s+\");\n\n            case SplitPattern::CSV:\n                return split_regex(input, \",(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)\");\n\n            default:\n                throw std::invalid_argument(\"Unknown split pattern\");\n        }\n    }\n\n    enum class SplitPattern {\n        Whitespace,\n        WordBoundary,\n        Sentence,\n        CSV\n    };\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid regex_split_example() {\n    std::string text = \"Hello, world! This is a test. Multiple   spaces here.\";\n\n    \/\/ \u7a7a\u767d\u6587\u5b57\u3067\u5206\u5272\n    auto words = RegexSplitter::split_by_pattern(\n        text, \n        RegexSplitter::SplitPattern::Whitespace\n    );\n\n    \/\/ \u6587\u5358\u4f4d\u3067\u5206\u5272\n    auto sentences = RegexSplitter::split_by_pattern(\n        text,\n        RegexSplitter::SplitPattern::Sentence\n    );\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30ab\u30b9\u30bf\u30e0\u30c7\u30ea\u30df\u30bf\u306b\u3088\u308b\u5206\u5272\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u8907\u96d1\u306a\u30c7\u30ea\u30df\u30bf\u30d1\u30bf\u30fc\u30f3\u3084\u6761\u4ef6\u4ed8\u304d\u306e\u5206\u5272\u30eb\u30fc\u30eb\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;functional&gt;\n\nclass CustomDelimiterSplitter {\npublic:\n    using DelimiterPredicate = std::function&lt;bool(char)&gt;;\n    using TokenProcessor = std::function&lt;void(std::string_view)&gt;;\n\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30c7\u30ea\u30df\u30bf\u6761\u4ef6\u306b\u3088\u308b\u5206\u5272\n    static void split_with_predicate(\n        std::string_view input,\n        DelimiterPredicate is_delimiter,\n        TokenProcessor process_token\n    ) {\n        size_t start = 0;\n\n        for (size_t i = 0; i &lt; input.length(); ++i) {\n            if (is_delimiter(input[i])) {\n                if (i &gt; start) {\n                    process_token(input.substr(start, i - start));\n                }\n                start = i + 1;\n            }\n        }\n\n        if (start &lt; input.length()) {\n            process_token(input.substr(start));\n        }\n    }\n\n    \/\/ \u8907\u6570\u306e\u30c7\u30ea\u30df\u30bf\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u5206\u5272\n    static std::vector&lt;std::string&gt; split_multi_delimiter(\n        const std::string&amp; input,\n        const std::vector&lt;std::string&gt;&amp; delimiters\n    ) {\n        std::vector&lt;std::string&gt; tokens;\n        size_t start = 0;\n\n        while (start &lt; input.length()) {\n            \/\/ \u6700\u3082\u8fd1\u3044\u30c7\u30ea\u30df\u30bf\u3092\u63a2\u3059\n            size_t min_pos = std::string::npos;\n            size_t delimiter_length = 0;\n\n            for (const auto&amp; delimiter : delimiters) {\n                size_t pos = input.find(delimiter, start);\n                if (pos != std::string::npos &amp;&amp; \n                    (min_pos == std::string::npos || pos &lt; min_pos)) {\n                    min_pos = pos;\n                    delimiter_length = delimiter.length();\n                }\n            }\n\n            if (min_pos == std::string::npos) {\n                tokens.push_back(input.substr(start));\n                break;\n            }\n\n            tokens.push_back(input.substr(start, min_pos - start));\n            start = min_pos + delimiter_length;\n        }\n\n        return tokens;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30d1\u30e9\u30e1\u30fc\u30bf\u51e6\u7406\u306b\u3088\u308b\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u9ad8\u901f\u5206\u5272<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;future&gt;\n#include &lt;thread&gt;\n\nclass BulkStringSplitter {\npublic:\n    \/\/ \u4e26\u5217\u51e6\u7406\u306b\u3088\u308b\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u5206\u5272\n    static std::vector&lt;std::string&gt; parallel_split(\n        const std::string&amp; input,\n        const std::string&amp; delimiter,\n        size_t chunk_size = 1024 * 1024  \/\/ 1MB\n    ) {\n        if (input.length() &lt; chunk_size) {\n            return SafeStringSplitter::split_safe(input, delimiter);\n        }\n\n        \/\/ \u30c1\u30e3\u30f3\u30af\u5206\u5272\u306e\u305f\u3081\u306e\u6e96\u5099\n        std::vector&lt;std::future&lt;std::vector&lt;std::string&gt;&gt;&gt; futures;\n        size_t num_chunks = (input.length() + chunk_size - 1) \/ chunk_size;\n        std::vector&lt;std::string&gt; partial_results[num_chunks];\n\n        \/\/ \u5404\u30c1\u30e3\u30f3\u30af\u3092\u4e26\u5217\u51e6\u7406\n        for (size_t i = 0; i &lt; num_chunks; ++i) {\n            size_t start = i * chunk_size;\n            size_t end = std::min((i + 1) * chunk_size, input.length());\n\n            \/\/ \u30c1\u30e3\u30f3\u30af\u5883\u754c\u306e\u8abf\u6574\n            if (i &gt; 0) {\n                start = input.find(delimiter, start);\n                if (start == std::string::npos) break;\n                start += delimiter.length();\n            }\n            if (i &lt; num_chunks - 1) {\n                end = input.find(delimiter, end);\n                if (end == std::string::npos) {\n                    end = input.length();\n                }\n            }\n\n            \/\/ \u975e\u540c\u671f\u51e6\u7406\u306e\u958b\u59cb\n            futures.push_back(std::async(\n                std::launch::async,\n                [&amp;input, start, end, &amp;delimiter]() {\n                    return SafeStringSplitter::split_safe(\n                        input.substr(start, end - start),\n                        delimiter\n                    );\n                }\n            ));\n        }\n\n        \/\/ \u7d50\u679c\u306e\u7d50\u5408\n        std::vector&lt;std::string&gt; result;\n        for (auto&amp; future : futures) {\n            auto partial = future.get();\n            result.insert(\n                result.end(),\n                std::make_move_iterator(partial.begin()),\n                std::make_move_iterator(partial.end())\n            );\n        }\n\n        return result;\n    }\n\n    \/\/ \u30e1\u30e2\u30ea\u30de\u30c3\u30d7\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u305f\u5927\u898f\u6a21\u30d5\u30a1\u30a4\u30eb\u306e\u5206\u5272\n    static void split_large_file(\n        const std::string&amp; filename,\n        const std::string&amp; delimiter,\n        TokenProcessor process_token\n    ) {\n        \/\/ \u30e1\u30e2\u30ea\u30de\u30c3\u30d7\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u5b9f\u88c5\n        \/\/ (\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4f9d\u5b58\u306e\u305f\u3081\u3001\u6982\u8981\u306e\u307f\u793a\u3059)\n        \/\/ 1. \u30d5\u30a1\u30a4\u30eb\u3092\u30e1\u30e2\u30ea\u306b\u30de\u30c3\u30d7\n        \/\/ 2. \u30de\u30c3\u30d7\u3055\u308c\u305f\u9818\u57df\u3092\u9806\u6b21\u30b9\u30ad\u30e3\u30f3\n        \/\/ 3. \u30c7\u30ea\u30df\u30bf\u3092\u898b\u3064\u3051\u305f\u3089\u8a72\u5f53\u90e8\u5206\u3092\u51e6\u7406\n        \/\/ 4. \u51e6\u7406\u5b8c\u4e86\u5f8c\u3001\u30de\u30c3\u30d4\u30f3\u30b0\u3092\u89e3\u9664\n    }\n};<\/pre>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u306e\u6d3b\u7528\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6b63\u898f\u8868\u73fe\u306e\u4f7f\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u96d1\u306a\u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u30f3\u30b0<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u5206\u5272\u30eb\u30fc\u30eb\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u6587\u5b57\u5217\u306e\u524d\u51e6\u7406\u3068\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30c7\u30ea\u30df\u30bf<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u6570\u30c7\u30ea\u30df\u30bf\u306e\u7d44\u307f\u5408\u308f\u305b<\/li>\n\n\n\n<li>\u6761\u4ef6\u4ed8\u304d\u5206\u5272\u30eb\u30fc\u30eb<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u4f9d\u5b58\u306e\u5206\u5272\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e26\u5217\u51e6\u7406\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u51e6\u7406\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u69d8\u3005\u306a\u8981\u4ef6\u306b\u5bfe\u5fdc\u3057\u305f\u52b9\u7387\u7684\u306a\u6587\u5b57\u5217\u5206\u5272\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u304a\u3051\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">\u6587\u5b57\u5217\u5206\u5272\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u30d0\u30e9\u30f3\u30b9<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u6587\u5b57\u5217\u5206\u5272\u51e6\u7406\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u62e1\u5f35\u6027\u3068\u4fdd\u5b88\u6027\u3092\u8003\u616e\u3057\u305f\u6587\u5b57\u5217\u5206\u5272\u30af\u30e9\u30b9\nclass StringSplitterBestPractice {\npublic:\n    \/\/ \u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u69cb\u9020\u4f53\u3068\u3057\u3066\u5b9a\u7fa9\n    struct SplitOptions {\n        bool trim_tokens = false;\n        bool skip_empty = false;\n        bool case_sensitive = true;\n        size_t reserve_size_hint = 0;\n\n        static SplitOptions default_options() {\n            return SplitOptions{};\n        }\n    };\n\n    \/\/ \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u3061\u3064\u3064\u3001\u67d4\u8edf\u306a\u5b9f\u88c5\u3092\u63d0\u4f9b\n    template&lt;typename Container = std::vector&lt;std::string&gt;&gt;\n    static Container split(\n        std::string_view input,\n        std::string_view delimiter,\n        const SplitOptions&amp; options = SplitOptions::default_options()\n    ) {\n        Container tokens;\n        if (options.reserve_size_hint &gt; 0 &amp;&amp; \n            tokens.max_size() &gt;= options.reserve_size_hint) {\n            tokens.reserve(options.reserve_size_hint);\n        }\n\n        \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30ed\u30fc\u30ab\u30eb\u5909\u6570\n        const size_t input_size = input.size();\n        const size_t delimiter_size = delimiter.size();\n        size_t pos = 0;\n        size_t prev = 0;\n\n        \/\/ \u30e1\u30a4\u30f3\u306e\u5206\u5272\u30ed\u30b8\u30c3\u30af\n        while ((pos = find_next_delimiter(\n            input, delimiter, prev, options.case_sensitive)) \n            != std::string_view::npos) {\n\n            process_token(\n                input.substr(prev, pos - prev),\n                tokens,\n                options\n            );\n            prev = pos + delimiter_size;\n        }\n\n        \/\/ \u6700\u5f8c\u306e\u30c8\u30fc\u30af\u30f3\u3092\u51e6\u7406\n        if (prev &lt; input_size) {\n            process_token(\n                input.substr(prev),\n                tokens,\n                options\n            );\n        }\n\n        return tokens;\n    }\n\nprivate:\n    \/\/ \u30c8\u30fc\u30af\u30f3\u51e6\u7406\u306e\u5171\u901a\u30ed\u30b8\u30c3\u30af\n    template&lt;typename Container&gt;\n    static void process_token(\n        std::string_view token,\n        Container&amp; tokens,\n        const SplitOptions&amp; options\n    ) {\n        if (options.trim_tokens) {\n            token = trim(token);\n        }\n\n        if (!options.skip_empty || !token.empty()) {\n            tokens.emplace_back(token);\n        }\n    }\n\n    \/\/ \u6587\u5b57\u5217\u306e\u30c8\u30ea\u30e0\u51e6\u7406\n    static std::string_view trim(std::string_view str) {\n        const auto first = str.find_first_not_of(\" \\t\\n\\r\");\n        if (first == std::string_view::npos) return {};\n        const auto last = str.find_last_not_of(\" \\t\\n\\r\");\n        return str.substr(first, last - first + 1);\n    }\n\n    \/\/ \u30c7\u30ea\u30df\u30bf\u691c\u7d22\u306e\u6700\u9069\u5316\u3055\u308c\u305f\u5b9f\u88c5\n    static size_t find_next_delimiter(\n        std::string_view input,\n        std::string_view delimiter,\n        size_t start_pos,\n        bool case_sensitive\n    ) {\n        if (case_sensitive) {\n            return input.find(delimiter, start_pos);\n        }\n\n        \/\/ \u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3057\u306a\u3044\u691c\u7d22\u306e\u5b9f\u88c5\n        return case_insensitive_find(input, delimiter, start_pos);\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306b\u3088\u308b\u54c1\u8cea\u4fdd\u8a3c<\/h3>\n\n\n\n<p>\u5305\u62ec\u7684\u306a\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u7528\u610f\u3057\u3001\u5b9f\u88c5\u306e\u54c1\u8cea\u3092\u78ba\u4fdd\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;gtest\/gtest.h&gt;\n\nclass StringSplitterTest : public ::testing::Test {\nprotected:\n    StringSplitterBestPractice splitter;\n\n    void SetUp() override {\n        \/\/ \u30c6\u30b9\u30c8\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n    }\n};\n\n\/\/ \u57fa\u672c\u6a5f\u80fd\u306e\u30c6\u30b9\u30c8\nTEST_F(StringSplitterTest, BasicSplitting) {\n    const std::string input = \"apple,banana,cherry\";\n    const auto tokens = splitter.split(input, \",\");\n\n    ASSERT_EQ(tokens.size(), 3);\n    EXPECT_EQ(tokens[0], \"apple\");\n    EXPECT_EQ(tokens[1], \"banana\");\n    EXPECT_EQ(tokens[2], \"cherry\");\n}\n\n\/\/ \u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u30c6\u30b9\u30c8\nTEST_F(StringSplitterTest, EdgeCases) {\n    \/\/ \u7a7a\u6587\u5b57\u5217\n    EXPECT_TRUE(splitter.split(\"\", \",\").empty());\n\n    \/\/ \u30c7\u30ea\u30df\u30bf\u306a\u3057\n    const auto single = splitter.split(\"text\", \",\");\n    ASSERT_EQ(single.size(), 1);\n    EXPECT_EQ(single[0], \"text\");\n\n    \/\/ \u9023\u7d9a\u30c7\u30ea\u30df\u30bf\n    const auto multiple = splitter.split(\"a,,b\", \",\");\n    ASSERT_EQ(multiple.size(), 3);\n    EXPECT_EQ(multiple[1], \"\");\n}\n\n\/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\u6a5f\u80fd\u306e\u30c6\u30b9\u30c8\nTEST_F(StringSplitterTest, OptionsHandling) {\n    StringSplitterBestPractice::SplitOptions options;\n    options.trim_tokens = true;\n    options.skip_empty = true;\n\n    const std::string input = \" a , , b \";\n    const auto tokens = splitter.split(input, \",\", options);\n\n    ASSERT_EQ(tokens.size(), 2);\n    EXPECT_EQ(tokens[0], \"a\");\n    EXPECT_EQ(tokens[1], \"b\");\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5bfe\u5fdc\u306e\u8003\u616e\u70b9<\/h3>\n\n\n\n<p>\u7570\u306a\u308b\u74b0\u5883\u3067\u306e\u52d5\u4f5c\u3092\u4fdd\u8a3c\u3059\u308b\u305f\u3081\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class CrossPlatformSplitter {\npublic:\n    \/\/ \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4f9d\u5b58\u306e\u6539\u884c\u30b3\u30fc\u30c9\u5bfe\u5fdc\n    static std::vector&lt;std::string&gt; split_lines(const std::string&amp; input) {\n        std::vector&lt;std::string&gt; lines;\n        std::string current_line;\n\n        for (size_t i = 0; i &lt; input.length(); ++i) {\n            if (input[i] == '\\r') {\n                if (i + 1 &lt; input.length() &amp;&amp; input[i + 1] == '\\n') {\n                    \/\/ Windows style: \\r\\n\n                    lines.push_back(std::move(current_line));\n                    current_line.clear();\n                    ++i;  \/\/ Skip \\n\n                } else {\n                    \/\/ Mac style: \\r\n                    lines.push_back(std::move(current_line));\n                    current_line.clear();\n                }\n            } else if (input[i] == '\\n') {\n                \/\/ Unix style: \\n\n                lines.push_back(std::move(current_line));\n                current_line.clear();\n            } else {\n                current_line += input[i];\n            }\n        }\n\n        if (!current_line.empty()) {\n            lines.push_back(std::move(current_line));\n        }\n\n        return lines;\n    }\n\n    \/\/ \u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u5bfe\u5fdc\n    static std::vector&lt;std::string&gt; split_with_encoding(\n        const std::string&amp; input,\n        const std::string&amp; delimiter,\n        const std::string&amp; encoding = \"UTF-8\"\n    ) {\n        \/\/ ICU\u30e9\u30a4\u30d6\u30e9\u30ea\u306a\u3069\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\n        \/\/ \u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u5909\u63db\u3068\u6587\u5b57\u5217\u5206\u5272\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\n    }\n\n    \/\/ \u30ed\u30b1\u30fc\u30eb\u5bfe\u5fdc\n    static std::vector&lt;std::string&gt; split_localized(\n        const std::string&amp; input,\n        const std::string&amp; delimiter,\n        const std::locale&amp; loc = std::locale(\"\")\n    ) {\n        \/\/ \u30ed\u30b1\u30fc\u30eb\u3092\u8003\u616e\u3057\u305f\u6587\u5b57\u5217\u51e6\u7406\n    }\n};<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u54c1\u8cea\u306e\u78ba\u4fdd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u547d\u540d\u898f\u5247\u306e\u4e00\u8cab\u6027<\/li>\n\n\n\n<li>\u30b3\u30e1\u30f3\u30c8\u3068\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5145\u5b9f<\/li>\n\n\n\n<li>SRP\uff08\u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\uff09\u306e\u9075\u5b88<\/li>\n\n\n\n<li>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4e00\u8cab\u6027<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u7db2\u7f85\u6027<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c6\u30b9\u30c8\u306e\u5b9f\u65bd<\/li>\n\n\n\n<li>\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u30ab\u30d0\u30ec\u30c3\u30b8<\/li>\n\n\n\n<li>\u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5bfe\u5fdc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0<\/li>\n\n\n\n<li>\u6539\u884c\u30b3\u30fc\u30c9<\/li>\n\n\n\n<li>\u30ed\u30b1\u30fc\u30eb\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30a4\u30e9\u4e92\u63db\u6027<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u9ad8\u54c1\u8cea\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u6587\u5b57\u5217\u5206\u5272\u6a5f\u80fd\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5177\u4f53\u7684\u306a\u5fdc\u7528\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-22\">\u767a\u5c55\u7684\u306a\u5fdc\u7528\u4f8b\u3068\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">CSV\u30d1\u30fc\u30b5\u30fc\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u9ad8\u6a5f\u80fd\u306aCSV\u30d1\u30fc\u30b5\u30fc\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002RFC 4180\u6e96\u62e0\u3067\u3001\u5f15\u7528\u7b26\u3084\u30a8\u30b9\u30b1\u30fc\u30d7\u30b7\u30fc\u30b1\u30f3\u30b9\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;fstream&gt;\n#include &lt;sstream&gt;\n#include &lt;vector&gt;\n#include &lt;optional&gt;\n\nclass CSVParser {\npublic:\n    struct CSVOptions {\n        char delimiter = ',';\n        char quote = '\"';\n        char escape = '\\\\';\n        bool trim_spaces = true;\n        bool skip_empty_lines = true;\n    };\n\n    class CSVRow {\n    private:\n        std::vector&lt;std::string&gt; fields_;\n\n    public:\n        explicit CSVRow(std::vector&lt;std::string&gt;&amp;&amp; fields)\n            : fields_(std::move(fields)) {}\n\n        const std::string&amp; operator[](size_t index) const {\n            return fields_.at(index);\n        }\n\n        size_t size() const { return fields_.size(); }\n\n        auto begin() const { return fields_.begin(); }\n        auto end() const { return fields_.end(); }\n    };\n\n    \/\/ CSV\u30d5\u30a1\u30a4\u30eb\u30921\u884c\u305a\u3064\u8aad\u307f\u8fbc\u3080\u30a4\u30c6\u30ec\u30fc\u30bf\n    class CSVIterator {\n    private:\n        std::ifstream&amp; file_;\n        CSVOptions options_;\n        std::optional&lt;CSVRow&gt; current_row_;\n\n    public:\n        CSVIterator(std::ifstream&amp; file, const CSVOptions&amp; options)\n            : file_(file), options_(options) {\n            ++(*this);  \/\/ \u6700\u521d\u306e\u884c\u3092\u8aad\u307f\u8fbc\u3080\n        }\n\n        CSVIterator&amp; operator++() {\n            std::string line;\n            while (std::getline(file_, line)) {\n                if (options_.skip_empty_lines &amp;&amp; line.empty()) {\n                    continue;\n                }\n                current_row_ = parse_line(line);\n                return *this;\n            }\n            current_row_ = std::nullopt;\n            return *this;\n        }\n\n        const CSVRow&amp; operator*() const { return *current_row_; }\n\n        bool operator==(const CSVIterator&amp; other) const {\n            return (!current_row_ &amp;&amp; !other.current_row_) ||\n                   (current_row_ &amp;&amp; other.current_row_ &amp;&amp; \n                    *current_row_ == *other.current_row_);\n        }\n\n    private:\n        CSVRow parse_line(const std::string&amp; line) {\n            std::vector&lt;std::string&gt; fields;\n            std::string field;\n            bool in_quotes = false;\n\n            for (size_t i = 0; i &lt; line.length(); ++i) {\n                char c = line[i];\n\n                if (c == options_.escape &amp;&amp; i + 1 &lt; line.length()) {\n                    field += line[++i];\n                    continue;\n                }\n\n                if (c == options_.quote) {\n                    in_quotes = !in_quotes;\n                    continue;\n                }\n\n                if (!in_quotes &amp;&amp; c == options_.delimiter) {\n                    if (options_.trim_spaces) {\n                        field = trim(field);\n                    }\n                    fields.push_back(std::move(field));\n                    field.clear();\n                    continue;\n                }\n\n                field += c;\n            }\n\n            if (!field.empty() || !fields.empty()) {\n                if (options_.trim_spaces) {\n                    field = trim(field);\n                }\n                fields.push_back(std::move(field));\n            }\n\n            return CSVRow(std::move(fields));\n        }\n\n        static std::string trim(const std::string&amp; str) {\n            const auto first = str.find_first_not_of(\" \\t\\r\\n\");\n            if (first == std::string::npos) return {};\n            const auto last = str.find_last_not_of(\" \\t\\r\\n\");\n            return str.substr(first, last - first + 1);\n        }\n    };\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u30d1\u30fc\u30b5\u30fc\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>INI\u30b9\u30bf\u30a4\u30eb\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3059\u308b\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ConfigParser {\npublic:\n    using ConfigMap = std::unordered_map&lt;std::string, \n                      std::unordered_map&lt;std::string, std::string&gt;&gt;;\n\n    static ConfigMap parse_config(const std::string&amp; filename) {\n        ConfigMap config;\n        std::string current_section;\n        std::ifstream file(filename);\n        std::string line;\n\n        while (std::getline(file, line)) {\n            \/\/ \u7a7a\u884c\u3068\u30b3\u30e1\u30f3\u30c8\u3092\u30b9\u30ad\u30c3\u30d7\n            if (line.empty() || line[0] == ';' || line[0] == '#') {\n                continue;\n            }\n\n            \/\/ \u30bb\u30af\u30b7\u30e7\u30f3\u306e\u51e6\u7406 [section]\n            if (line[0] == '[') {\n                size_t end = line.find(']');\n                if (end != std::string::npos) {\n                    current_section = line.substr(1, end - 1);\n                    continue;\n                }\n            }\n\n            \/\/ \u30ad\u30fc=\u5024 \u306e\u51e6\u7406\n            size_t equals_pos = line.find('=');\n            if (equals_pos != std::string::npos) {\n                std::string key = trim(line.substr(0, equals_pos));\n                std::string value = trim(line.substr(equals_pos + 1));\n\n                \/\/ \u5f15\u7528\u7b26\u306e\u9664\u53bb\n                if (value.size() &gt;= 2 &amp;&amp; \n                    (value[0] == '\"' || value[0] == '\\'')) {\n                    value = value.substr(1, value.size() - 2);\n                }\n\n                config[current_section][key] = value;\n            }\n        }\n\n        return config;\n    }\n\n    \/\/ \u578b\u5909\u63db\u6a5f\u80fd\u4ed8\u304d\u306e\u5024\u53d6\u5f97\u30e1\u30bd\u30c3\u30c9\n    template&lt;typename T&gt;\n    static std::optional&lt;T&gt; get_value(\n        const ConfigMap&amp; config,\n        const std::string&amp; section,\n        const std::string&amp; key\n    ) {\n        auto section_it = config.find(section);\n        if (section_it == config.end()) return std::nullopt;\n\n        auto key_it = section_it-&gt;second.find(key);\n        if (key_it == section_it-&gt;second.end()) return std::nullopt;\n\n        try {\n            if constexpr (std::is_same_v&lt;T, std::string&gt;) {\n                return key_it-&gt;second;\n            } else if constexpr (std::is_same_v&lt;T, int&gt;) {\n                return std::stoi(key_it-&gt;second);\n            } else if constexpr (std::is_same_v&lt;T, double&gt;) {\n                return std::stod(key_it-&gt;second);\n            } else if constexpr (std::is_same_v&lt;T, bool&gt;) {\n                std::string value = to_lower(key_it-&gt;second);\n                return value == \"true\" || value == \"1\" || value == \"yes\";\n            }\n        } catch (...) {\n            return std::nullopt;\n        }\n\n        return std::nullopt;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u89e3\u6790\u3067\u306e\u6d3b\u7528\u4f8b<\/h3>\n\n\n\n<p>\u69cb\u9020\u5316\u30ed\u30b0\u306e\u89e3\u6790\u3092\u884c\u3046\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class LogAnalyzer {\npublic:\n    struct LogEntry {\n        std::chrono::system_clock::time_point timestamp;\n        std::string level;\n        std::string component;\n        std::string message;\n        std::unordered_map&lt;std::string, std::string&gt; attributes;\n    };\n\n    \/\/ \u30ed\u30b0\u30a8\u30f3\u30c8\u30ea\u306e\u30d1\u30fc\u30b9\n    static std::optional&lt;LogEntry&gt; parse_log_line(const std::string&amp; line) {\n        try {\n            \/\/ \u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u3067\u30ed\u30b0\u5f62\u5f0f\u3092\u89e3\u6790\n            static const std::regex log_pattern(\n                R\"((\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\s+\"  \/\/ timestamp\n                \"(\\w+)\\s+\"                                      \/\/ level\n                \"(\\[[\\w-]+\\])\\s+\"                              \/\/ component\n                \"(.*?)(?:\\s+\\{(.*)\\})?$)\"                      \/\/ message &amp; attrs\n            );\n\n            std::smatch matches;\n            if (!std::regex_match(line, matches, log_pattern)) {\n                return std::nullopt;\n            }\n\n            LogEntry entry;\n\n            \/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306e\u89e3\u6790\n            std::istringstream ss(matches[1].str());\n            std::tm tm = {};\n            ss &gt;&gt; std::get_time(&amp;tm, \"%Y-%m-%d %H:%M:%S\");\n            entry.timestamp = std::chrono::system_clock::from_time_t(\n                std::mktime(&amp;tm)\n            );\n\n            entry.level = matches[2].str();\n            entry.component = matches[3].str();\n            entry.message = matches[4].str();\n\n            \/\/ \u5c5e\u6027\u306e\u89e3\u6790\n            if (matches[5].matched) {\n                std::string attrs = matches[5].str();\n                parse_attributes(attrs, entry.attributes);\n            }\n\n            return entry;\n\n        } catch (const std::exception&amp; e) {\n            return std::nullopt;\n        }\n    }\n\n    \/\/ \u30ed\u30b0\u306e\u96c6\u8a08\u5206\u6790\n    static std::unordered_map&lt;std::string, size_t&gt; \n    analyze_error_frequency(const std::string&amp; log_file) {\n        std::unordered_map&lt;std::string, size_t&gt; error_counts;\n        std::ifstream file(log_file);\n        std::string line;\n\n        while (std::getline(file, line)) {\n            auto entry = parse_log_line(line);\n            if (entry &amp;&amp; entry-&gt;level == \"ERROR\") {\n                error_counts[entry-&gt;component]++;\n            }\n        }\n\n        return error_counts;\n    }\n\nprivate:\n    static void parse_attributes(\n        const std::string&amp; attrs_str,\n        std::unordered_map&lt;std::string, std::string&gt;&amp; attrs\n    ) {\n        std::regex attr_pattern(R\"((\\w+)=\"([^\"]*)\")\");\n        auto begin = std::sregex_iterator(\n            attrs_str.begin(), attrs_str.end(), attr_pattern\n        );\n        auto end = std::sregex_iterator();\n\n        for (std::sregex_iterator i = begin; i != end; ++i) {\n            std::smatch match = *i;\n            attrs[match[1]] = match[2];\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u5fdc\u7528\u4f8b\u306e\u5b9f\u88c5\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CSV\u30d1\u30fc\u30b5\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RFC 4180\u898f\u683c\u3078\u306e\u6e96\u62e0<\/li>\n\n\n\n<li>\u30a8\u30b9\u30b1\u30fc\u30d7\u30b7\u30fc\u30b1\u30f3\u30b9\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u51e6\u7406\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u30d1\u30fc\u30b5\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bb\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/li>\n\n\n\n<li>\u578b\u5b89\u5168\u306a\u5024\u306e\u53d6\u5f97<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u51e6\u7406<\/li>\n\n\n\n<li>\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30b0\u89e3\u6790<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u30f3\u30b0<\/li>\n\n\n\n<li>\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u69cb\u9020\u5316\u30c7\u30fc\u30bf\u306e\u89e3\u6790<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u696d\u52d9\u3067\u906d\u9047\u3059\u308b\u5178\u578b\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-2187","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2187"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2187\/revisions"}],"predecessor-version":[{"id":2188,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2187\/revisions\/2188"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}