C语言:strstr用法详细解释

在C语言中,strstr是一个用于在字符串中查找子字符串的函数

函数原型如下:

char *strstr(char *haystack, char *needle);
  • 该函数接受两个参数:haystack是要进行查找的字符串,needle是要查找的子字符串。
  • 函数的返回值是一个指向找到的子字符串在主字符串中的位置的指针,或者如果未找到该子字符串,则返回NULL。

下面我们来用c语言手动实现一下strstr函数:

#include <stdio.h>
#include <string.h>

char *my_strstr(char *haystack, char *needle) {
    size_t needle_length = strlen(needle);
    size_t haystack_length = strlen(haystack);

    if (needle_length > haystack_length)
        return NULL;

    for (size_t i = 0; i <= haystack_length - needle_length; i++) {
        size_t j;
        for (j = 0; j < needle_length; j++) {
            if (haystack[i + j] != needle[j])
                break;
        }
        if (j == needle_length)
            return &haystack[i];
    }

    return NULL;
}

int main() {
    char haystack[] = "Hello, world!";
    char needle[] = "world";
    char *result = my_strstr(haystack, needle);

    if (result != NULL) {
        printf("在字符串 '%s' 中找到子串 '%s',位置为:%ld\n", haystack, needle, result - haystack);
    } else {
        printf("在字符串 '%s' 中未找到子串 '%s'。\n", haystack, needle);
    }

    return 0;
}
  • 在上述代码中,我们定义了一个名为my_strstr的函数,它与标准库中的strstr函数功能相同。
  • 函数参数char *haystack和char *needle表示主字符串和子字符串。
  • 我们首先计算子字符串和主字符串的长度,并检查子字符串的长度是否超过主字符串,如果是,则直接返回NULL。
  • 然后,我们使用嵌套的循环来在主字符串中查找子字符串。外层循环遍历主字符串,内层循环用于逐个比较子字符串中的字符和主字符串中对应位置的字符。
  • 如果找到了完全匹配的子字符串,我们返回指向匹配位置的指针。
  • 如果遍历完整个主字符串都未找到匹配的子字符串,则返回NULL。
  • 在main函数中,我们声明可修改的字符数组作为主字符串和子字符串,然后调用my_strstr函数来查找子字符串在主字符串中的位置。
  • 最后,根据返回值是否为NULL,我们打印相应的结果。

下面是一个使用strstr函数的示例:

#include <stdio.h>
#include <string.h>

int main() {
    char *haystack = "Hello, world!";
    char *needle = "world";
    char *result = strstr(haystack, needle);

    if (result != NULL) {
        printf("在主字符串中找到子字符串 '%s',位置为:%d\n", needle, result - haystack);
    } else {
        printf("在主字符串中未找到子字符串 '%s'\n", needle);
    }

    return 0;
}

运行结果:
在这里插入图片描述

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值