strstr函数 与strpbrk函数源码分析
strstr函数,与strpbrk函数
两个函数在参数和返回值上几乎完全一样。
但是一个是全部匹配才算查找到,一个是只要出现一个字符即算查找到。
一、strstr函数
#include <stdio.h>
#include <string.h>
int StringSearch(const char* str, const char* strSearch)
{ //快速原型法和归纳法
for (int i = 0; str[i] !='\0'; ++i)
{
int j = 0;
for (; strSearch[j] != '\0';++j)
{
if (str[i+j]!= strSearch[j])
break;
}
if (strSearch[j] == '\0')
return i;
}
return -1;
}
int main()
{
char str[] = "This is a simple string";
puts(str);
int n = StringSearch(str, "simple");
if (n != -1)
str[n + 1] = 'a';
puts(str);
return 0;
}
二、strpbrk函数
#include <stdio.h>
#include <string.h>
int StringMulti(const char* str, const char* strSearch)
{
int i = -1;
while (str[++i])
{
char c = str[i];
int j = -1;
while (strSearch[++j])
{
if (strSearch[j] == c)
return i;
}
}
return -1;
}
int main()
{
char str[] = "This is a sample string";
char key[] = "aeiou";
printf("Vowels in '%s': ", str);
int n = StringMulti(str, key);
int sum = 0;
while (n != -1)
{
sum += n+1;
printf("%c ", str[sum-1]);
n = StringMulti(&str[sum], key);
}
printf("\n");
return 0;
}
//int StringMulti(const char* str, const char* strSearch)
//{
// int i = -1;
// while (str[++i])
// {
// char c = str[i];
// if (strchr(strSearch, c) != NULL)
// {
// return i;
// }
// }
// return -1;
//}