string - 在某些条件下提取字符串中的子字符串
问题描述
我希望你一切都好 !我向你提出我的问题。我有一个字符串(在单行上),想法是从字符串中的给定位置迭代字符串,逐个字符向左移动并在遇到分隔符时停止(分隔符在列表中),然后执行在右边和最后,将两者放在一起形成您要查找的单词。我编写了以下函数,但它并不完全有效,当我将自己定位在一个单词的末尾(如位置 4)时,它会返回一个字符串“”而不是返回“this”。当我转到位置 1 时,它发送给我的是“他的”而不是“这个”。当我将自己置于 44 位时,我输出的是“tha”而不是“that”。另一方面,在字符串的中间位置 36 或 40,它可以工作。谁能帮我修复这些错误?
(* separators *)
let sep_list = [';';',';'(';')';'.';' ';]
(* my string to test *)
let my_str = "this is my string for testing purpose, only that"
(* my function *)
let search_word_in_cursor (str:string) (char_list:char list) (pos:int) : string =
let rec foo_left (str:string) (char_list:char list) (pos:int) (ret:string) : string =
if ((List.exists (fun x -> Char.equal x str.[pos]) char_list) || (pos <= 0)) then ret
else if (pos == 0) then String.make 1 str.[pos] ^ ret
else foo_left str char_list (pos - 1) ((String.make 1 str.[pos]) ^ ret)
in
let rec foo_right (str:string) (char_list:char list) (pos:int) (ret:string) : string =
if ((List.exists (fun x -> Char.equal x str.[pos]) char_list) || (pos >= (String.length str - 1))) then ret
else foo_right str char_list (pos + 1) (ret ^ (String.make 1 str.[pos]))
in
let sl = foo_left str char_list pos "" in
let sr = foo_right str char_list pos "" in
if (sr == "" && sl == "") then ""
else if (sr == "" && sl != "") then sl
else if (sr != "" && sl == "") then sr
else (String.sub sl 0 (String.length sl - 1)) ^ sr
(* expects and results *)
let () =
print_string (search_word_in_cursor my_str sep_list 4); (* expected:"this" output:"" *)
print_string (search_word_in_cursor my_str sep_list 1);(* expected:"this" output:"his" *)
print_string (search_word_in_cursor my_str sep_list 44);(* expected:"that" output:"tha" *)
print_string (search_word_in_cursor my_str sep_list 36);(* expected:"purpose" output:"purpose" *)
print_string (search_word_in_cursor my_str sep_list 40)(* expected:"only" output:"only" *)
谢谢大家,goog!
解决方案
推荐阅读
- android - Android Studio Emulator 扩展控件中没有 Google Maps UI
- webpack - Webpack:如何将单个类导出为 UMD 库?
- c - 试图让 C 函数计算一个数字出现了多少次,每次返回相同的值
- database - 更新字段和值 mongoDB
- docker - 无法在 Ubuntu 仿生上运行 docker 守护进程
- amazon-web-services - get row by partition key on aws dynamodb
- javascript - 如何在 css/html/js 中移动图像?
- javascript - Discord Bot ReferenceError:未定义客户端
- c++ - 通用链接列表错误:LinkedList 不是类模板
- shell - 让我知道 sed'2!n;d' 的逻辑