文章目录
- 1. strstr函数的使用和模拟实现
- 1.1 strstr函数的使用
- 1.2 模拟实现strstr函数
- 1.3 strstr函数和strncpy函数、puts函数的混合使用
- 2. strtok函数的使用
- **3. strerror函数的使用**
1. strstr函数的使用和模拟实现
1.1 strstr函数的使用
- strstr函数是用来通过一个字符串来查找另一个字符串的,它的原形如下:
char* strstr ( const char* str1, const char* str2 )
- str1和str2分别是两个字符串的地址,strstr函数是在str1的字符串中查找str2所指的字符串
- strstr — string string —它返回的是字符串str2在字符串str1中第一次出现的位置
—
1.2 模拟实现strstr函数
- 首先我们先创建一个函数my_strstr,用来实现strstr函数的作用
- 接下来我们进行分析
//模拟实现strstr函数
#include <stdio.h>
#include <assert.h>
const char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
//定义两个指针来进行匹配
const char* s1 = str1;
const char* s2 = str2;
//cur指针用来标记可能进行匹配的位置
const char* cur = str1;
//若cur未指向'\0'
while (*cur)
{
//进行一次匹配
s1 = cur;
s2 = str2;
while(*s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
return cur;
//cur每次匹配完后++
cur++;
}
return NULL;
}
int main()
{
char arr1[] = "abbbbcdefabcdef";
char arr2[] = "bbc";
const char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
printf("no\n");
else
printf("%s\n",ret);
return 0;
}
1.3 strstr函数和strncpy函数、puts函数的混合使用
//strstr函数和strncpy函数、puts函数
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "This is a simple string";
char* pch;
pch = strstr(str, "simple");
if (pch != NULL)
strncpy(pch, "abcdef", 6);
puts(str);
return 0;
}
2. strtok函数的使用
- strtok函数的原形是
char* strtok ( char* str, const char* sep );
- sep指向一个字符串,该字符串实际上是一堆用作分隔符的集合
- 第一个参数str指向一个字符串,它其中包含0个或多个由sep字符串中的一个或多个分隔符分隔的标记
- strtok函数找到str中的下一个标记,并用’\0’结尾,返回一个指向这个标记的指针
- strtok函数会改变会被操作的字符串,因此一般是先拷贝一份字符串给strtok使用
- 当strtok函数的第一个参数不为NULL时,函数找到str中的第一个标记,并且strstr会保存它在字符串中的位置
- 当strtok函数的第一个参数是NULL时,函数将从保存的位置开始,查找下一个标记
- 如果字符串中不存在更多的标记,则返回NULL
通俗点讲,就是strtok有两个参数,第一个参数指向的是字符串,不过这个字符串中有英文字母和分隔符的组合,另一个参数也是指向字符串,不过第二个参数的字符串中全部是分隔符,该分隔符是用来查找第一个参数字符串中出现分隔符的
char* arr1[ ] = “1567899239@qq.com”
char* arr2[ ] = “@.”
- char* str = arr1;
- char* sep = arr2;
- 就像上面代码,sep字符串的分隔符是用来查找str字符串中出现该分隔符的位置,并将str中该分隔符改为’\0’,并且返回指向该字符串的指针
- 就像上面代码,他会先找到第一个出现分隔符’@‘的位置,然后将它改为’\0’,最后返回指向“1567899239”的地址(即“1”的地址),最后因为第一个参数不为NULL,strtok函数会保存此时被修改的’\0’位置,若下次第一个参数是NULL,它将会从该处开始查找下一个分隔符,即从" qq "处开始查
- sep字符串中的分隔符不分先后
- 注意
3. strerror函数的使用
- 而相对于strerror函数,perror函数操作起来更为简单
- perror函数会直接将错误信息打印出来