ソースを参照

llama : better replace_all (#8852)

Georgi Gerganov 1 年間 前
コミット
f1ea5146d7
1 ファイル変更7 行追加10 行削除
  1. 7 10
      src/llama.cpp

+ 7 - 10
src/llama.cpp

@@ -122,17 +122,14 @@ static std::string trim(const std::string & str) {
 }
 }
 
 
 static void replace_all(std::string & s, const std::string & search, const std::string & replace) {
 static void replace_all(std::string & s, const std::string & search, const std::string & replace) {
-    std::string result;
-    for (size_t pos = 0; ; pos += search.length()) {
-        auto new_pos = s.find(search, pos);
-        if (new_pos == std::string::npos) {
-            result += s.substr(pos, s.size() - pos);
-            break;
-        }
-        result += s.substr(pos, new_pos - pos) + replace;
-        pos = new_pos;
+    if (search.empty()) {
+        return; // Avoid infinite loop if 'search' is an empty string
+    }
+    size_t pos = 0;
+    while ((pos = s.find(search, pos)) != std::string::npos) {
+        s.replace(pos, search.length(), replace);
+        pos += replace.length();
     }
     }
-    s = std::move(result);
 }
 }
 
 
 static bool is_float_close(float a, float b, float abs_tol) {
 static bool is_float_close(float a, float b, float abs_tol) {