strstr--字符串处理

本文提供了三种不同的strstr函数实现方法,这些函数用于在一个字符串中查找子串首次出现的位置。通过对比三种实现方式,读者可以了解到不同遍历和匹配策略的细节。
#include<stdio.h>
#include<string.h>
char * strstr_1(char *s1,char *s2);
char *strstr_2(char *s1,char *s2);
char *strstr_3(char *s1, char *s2);
int main()
{
    char *p;
     p=strstr_1("helloworld","wor");
    printf("%s\n",p);
    p=strstr_2("helloworld","wor");
    printf("%s\n",p);
     p=strstr_3("helloworld","wor");
    printf("%s\n",p);


    return 0;
}
char *strstr_1(char *s1,char *s2)
{
    int len2=strlen(s2);
    if (!len2)
        return s1;
    while (*s1++)
    {
        if (*s1==*s2&&(strncmp(s1,s2,len2)==0))
            return s1;
    }
    return NULL;
}
char *strstr_2(char* s1,char *s2)
{
    int n,i,j;
    n=i=j=0;
    while(s1[i])
    {
        n=i;
        while(s2[j]&&s1[i])
        {
            if(s1[i]==s2[j])
            {
                i++;
                j++;
            }
            else
                break;
        }
        if (s2[j]=='\0')
            return &s1[i-j];
        else
        {
            i=n+1;
            j=0;
        }
    }
    return NULL;
}

char * strstr_3(char *s1,char* s2)
{
    int n;
    if (*s2)
    {
        while (*s1)
        {
            for (n=0; *(s1 + n) == *(s2 + n); n++)
            {
                if (!*(s2 + n + 1))
                    return (char *)s1;
            }
            s1++;
        }
        return NULL;
    }
    else
        return (char *)s1;
}

### C语言字符串处理函数 `strstr` 的使用方法 #### 函数定义 `strstr` 是 C 语言标准库 `<string.h>` 中的一个重要函数,用于在一个字符串中查找另一个子字符串首次出现的位置。如果找到匹配项,则返回指向该位置的指针;如果没有找到,则返回空指针 `NULL`。 其函数原型如下: ```c char *strstr(const char *haystack, const char *needle); ``` - 参数说明: - `haystack`: 表示要被搜索的目标字符串- `needle`: 表示需要查找的子字符串- 返回值: 如果成功找到子字符串,则返回目标字符串中第一个匹配处的地址;否则返回 `NULL`[^5]。 --- #### 示例代码 以下是几个典型的 `strstr` 使用案例: ##### 示例 1:基本用法 下面是一个简单的例子,演示如何在字符串 `"Hello World"` 中查找子字符串 `"World"` 是否存在。 ```c #include <stdio.h> #include <string.h> int main() { char str[] = "Hello World"; char subStr[] = "World"; char *result = strstr(str, subStr); if (result != NULL) { printf("子字符串 \"%s\" 找到于:%s\n", subStr, result); } else { printf("未找到子字符串。\n"); } return 0; } ``` 运行结果将是: ``` 子字符串 "World" 找到于:World ``` 此例展示了当子字符串存在于目标字符串中时的行为。 --- ##### 示例 2:多次调用 `strstr` 可以连续调用 `strstr` 来定位多个相同子字符串的位置。例如,在字符串 `"abcdefabcdef"` 中查找两次 `"def"` 子字符串。 ```c #include <stdio.h> #include <string.h> int main() { char str[] = "abcdefabcdef"; char subStr[] = "def"; char *ptr = strstr(str, subStr); while (ptr != NULL) { printf("子字符串 \"%s\" 找到于:%s\n", subStr, ptr); ptr += strlen(subStr); // 移动指针至下一个可能位置 ptr = strstr(ptr, subStr); // 继续查找 } return 0; } ``` 运行结果可能是: ``` 子字符串 "def" 找到于:defabcdef 子字符串 "def" 找到于:def ``` 通过这种方式能够遍历整个字符串并获取所有匹配的结果[^4]。 --- ##### 示例 3:未找到的情况 如果指定的子字符串不存在于目标字符串之中,那么 `strstr` 将返回 `NULL` 值。 ```c #include <stdio.h> #include <string.h> int main() { char str[] = "Hello World"; char subStr[] = "Universe"; char *result = strstr(str, subStr); if (result == NULL) { printf("子字符串 \"%s\" 未找到。\n", subStr); } else { printf("子字符串 \"%s\" 找到于:%s\n", subStr, result); } return 0; } ``` 预期输出为: ``` 子字符串 "Universe" 未找到。 ``` 这表明了对于不包含特定模式的情况下该如何响应。 --- ### 注意事项 1. **区分大小写**:`strstr` 对字母敏感,意味着它会严格比较大小写的差异。比如,“hello” 和 “HELLO” 不会被认为相等。 2. **边界条件**:如果传入的是空字符串作为 needle (`""`) ,则总是返回 haystack 开始的地方,因为任何字符串都包含了零长度的前缀。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值