2025-03-11 学习记录--C/C++-C-返回字符串t在字符串s中首次或最后一次出现的位置、返回字符串s中第一个匹配或不匹配字符串t中任意字符的位置
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、C
- 返回 字符串t
在 字符串s
中首次出现的位置 ⭐️
如果函数的设计目的是查找 字符串
t
在字符串s
中首次出现的位置,可以使用 strstr。🌈
char *search(char *s, char *t) {
return strstr(s, t); // 使用标准库函数 strstr
}
-
如果
s
= “hello world
”,t
= “world
”,则返回指向 “world
” 的指针。 -
如果
t
= “abc
”,则返回NULL
。
#include <stdio.h> // 包含标准输入输出库,用于使用 printf 等函数
#include <string.h> // 包含字符串处理库,用于使用 strstr 等函数
// 定义 search 函数,接收两个字符串指针 s 和 t
char *search(char *s, char *t) {
return strstr(s, t); // 使用标准库函数 strstr 在 s 中查找 t 的首次出现位置
// 如果找到,返回指向该位置的指针;否则返回 NULL
}
// 主函数
int main() {
char *res; // 定义一个字符指针 res,用于存储 search 函数的返回值
// 调用 search 函数,在字符串 "The C Programming Language" 中查找子字符串 "ram"
// 将返回值赋值给 res
res = search("The C Programming Language", "ram");
// 检查 res 是否为 NULL
if (res != NULL) { // 如果 res 不为 NULL,说明找到了子字符串
printf("%s", res); // 打印从子字符串 "ram" 开始到字符串结束的部分
} else { // 如果 res 为 NULL,说明未找到子字符串
printf("Not found"); // 打印 "Not found"
}
return 0; // 程序正常结束
}
二、C
- 返回 字符串t
在 字符串s
中最后一次出现的位置 ⭐️
如果函数的设计目的是查找
t
在s
中最后一次出现的位置,则需要 手动实现查找逻辑。🌈
// 定义 search 函数,接收两个字符串指针 s 和 t
char *search(char *s, char *t) {
char *last = NULL; // 定义一个指针 last,用于记录 t 在 s 中最后一次出现的位置
char *tmp = s; // 定义一个指针 tmp,初始化为 s 的起始地址,用于遍历字符串 s
// 使用 strstr 在 s 中查找 t 的所有出现位置
while ((tmp = strstr(tmp, t)) != NULL) {
last = tmp; // 如果找到 t,更新 last 为当前找到的位置
tmp++; // 将 tmp 向后移动一位,继续查找下一个匹配位置
}
return last; // 返回 t 在 s 中最后一次出现的位置;如果未找到,返回 NULL
}
- 如果
s
= “hello world, world
”,t
= “world
”,则返回指向 第二个 “world
” 的指针。
三、C
- 返回 字符串s
中第一个匹配 字符串t
中任意字符的位置 ⭐️
如果函数的设计目的是查找
s
中第一个匹配t
中任意字符的位置,可以使用 strpbrk。🌈
char *search(char *s, char *t) {
return strpbrk(s, t);
}
- 如果
s
= “hello world
”,t = “aeiou
”,则返回指向 ‘e
’ 的指针。
四、C
- 返回 字符串s
中第一个不匹配 字符串t
中任意字符的位置 ⭐️
如果函数的设计目的是查找
s
中第一个不匹配t
中任意字符的位置,则需要手动实现逻辑。🌈
// 定义 search 函数,接收两个字符串指针 s 和 t
char *search(char *s, char *t) {
// 遍历字符串 s 的每个字符
for (int i = 0; s[i] != '\0'; i++) {
// 使用 strchr 在字符串 t 中查找当前字符 s[i]
if (strchr(t, s[i]) == NULL) {
// 如果 s[i] 不在 t 中,返回指向 s[i] 的指针
return &s[i];
}
}
// 如果 s 中的所有字符都在 t 中,返回 NULL
return NULL;
}
- 如果
s
= “hello
”,t
= “hel
”,则返回指向 ‘o
’ 的指针。