return false;
}
} else {
- if (angband_strstr(item_name.data(), entry.name.data()) == nullptr) {
+ if (angband_strstr(item_name.data(), entry.name) == nullptr) {
return false;
}
}
fprintf(fff, " %3d %sの %s\n", (int)this_monster, number_of_kills, r_ptr->name.data());
#else
if (this_monster < 2) {
- if (angband_strstr(r_ptr->name.data(), "coins")) {
+ if (r_ptr->name.find("coins") != std::string::npos) {
fprintf(fff, " 1 pile of %s\n", r_ptr->name.data());
} else {
fprintf(fff, " 1 %s\n", r_ptr->name.data());
return 1;
}
- if (const auto start_ptr = angband_strstr(lines[0].data(), "『");
- (start_ptr != nullptr) && suffix(lines[1], "』")) {
- const auto start_pos = start_ptr - lines[0].data();
-
+ if (const auto start_pos = lines[0].find("『");
+ (start_pos != std::string::npos) && suffix(lines[1], "』")) {
if (lines[0].length() + lines[1].length() - start_pos <= GRAVE_LINE_WIDTH) {
- const auto name = lines[0].substr(start_pos).append(lines[1]);
+ const auto &name = lines[0].substr(start_pos).append(lines[1]);
std::string_view title(lines[0].data(), start_pos);
show_tomb_line(title, GRAVE_KILLER_NAME_ROW);
show_tomb_line(name, GRAVE_KILLER_NAME_ROW + 1);
*
* angband_strstr() can handle Kanji strings correctly.
*/
-char *angband_strstr(concptr haystack, concptr needle)
+char *angband_strstr(const char *haystack, std::string_view needle)
{
- int l1 = strlen(haystack);
- int l2 = strlen(needle);
+ std::string_view haystack_view(haystack);
+ auto l1 = haystack_view.length();
+ auto l2 = needle.length();
+ if (l1 < l2) {
+ return nullptr;
+ }
- if (l1 >= l2) {
- for (int i = 0; i <= l1 - l2; i++) {
- if (!strncmp(haystack + i, needle, l2)) {
- return (char *)haystack + i;
- }
+ for (size_t i = 0; i <= l1 - l2; i++) {
+ const auto part = haystack_view.substr(i);
+ if (part.starts_with(needle)) {
+ return const_cast<char *>(haystack) + i;
+ }
#ifdef JP
- if (iskanji(*(haystack + i))) {
- i++;
- }
-#endif
+ if (iskanji(*(haystack + i))) {
+ i++;
}
+#endif
}
return nullptr;
void ascii_to_text(char *buf, std::string_view sv, size_t bufsize);
size_t angband_strcpy(char *buf, std::string_view src, size_t bufsize);
size_t angband_strcat(char *buf, std::string_view src, size_t bufsize);
-char *angband_strstr(concptr haystack, concptr needle);
+char *angband_strstr(const char *haystack, std::string_view needle);
char *angband_strchr(concptr ptr, char ch);
char *ltrim(char *p);
char *rtrim(char *p);