--- nono/lib/mystring.h 2026/04/29 17:04:31 1.1.1.2 +++ nono/lib/mystring.h 2026/04/29 17:04:54 1.1.1.4 @@ -1,10 +1,14 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once +#include "header.h" +#include + extern std::string string_format(const char *fmt, ...) __printflike(1, 2); // 先頭の連続する空白文字列を取り除いた新しい文字列を返す @@ -18,3 +22,27 @@ extern void rtrim(char *str); // 文字列中の ASCII 大文字を小文字にした新しい文字列を返す extern std::string string_tolower(const std::string& str); + +// 文字列 lhs の先頭が rhs と大文字小文字の区別なしで一致すれば true を返す。 +// ASCII 専用。 +extern bool +starts_with_ignorecase(const std::string& lhs, const std::string& rhs); + +// 文字列 str (長さ len) を文字 c で分割したリストを返す +// (実際には以下2つのどちらかを呼ぶことになるはず)。 +// +// str に c が含まれてなければ str 全体が1つの要素。 +// c が str の先頭あるいは末尾にあれば、先頭(末尾) に空要素が出来る。 +// 連続する c は同一の区切りとはみなさない。 +// c は ',' のようなのを想定している。 +extern std::vector string_split(const char *str, int len, char c); + +// 文字列 str を文字 c で分割したリストを返す。 +static inline std::vector string_split(const char *str, char c) { + return string_split(str, strlen(str), c); +} +// 文字列 str を文字 c で分割したリストを返す。 +static inline std::vector string_split(const std::string& str, + char c) { + return string_split(str.c_str(), str.size(), c); +}