c语言提取字符串中的子串
时间: 2023-10-08 15:14:49 浏览: 251
在C语言中提取字符串中的子串通常可以使用字符串库函数 `strstr()` 或者手动实现子串查找算法。
1. 使用 `strstr()` 函数
`strstr()` 函数可以在一个字符串中查找另一个子字符串出现的位置。它的原型如下:
```c
char *strstr(const char *str1, const char *str2);
```
其中,`str1` 是要查找的字符串,`str2` 是要查找的子字符串。如果 `str2` 存在于 `str1` 中,则返回 `str2` 在 `str1` 中第一次出现的地址;否则返回 `NULL`。
示例代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "hello world";
char str2[] = "world";
char *p = strstr(str1, str2);
if (p != NULL)
{
printf("子串 \"%s\" 在字符串 \"%s\" 中的位置是 %d\n", str2, str1, p - str1);
}
else
{
printf("子串 \"%s\" 不在字符串 \"%s\" 中\n", str2, str1);
}
return 0;
}
```
2. 手动实现子串查找算法
手动实现子串查找算法的基本思路是:在主串中从前往后逐个字符比较,如果当前字符匹配,则比较下一个字符,否则从主串的下一个字符重新开始匹配。
示例代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "hello world";
char str2[] = "world";
int len1 = strlen(str1);
int len2 = strlen(str2);
int i, j;
for (i = 0; i < len1 - len2 + 1; i++)
{
for (j = 0; j < len2; j++)
{
if (str1[i + j] != str2[j])
{
break;
}
}
if (j == len2)
{
printf("子串 \"%s\" 在字符串 \"%s\" 中的位置是 %d\n", str2, str1, i);
break;
}
}
if (i == len1 - len2 + 1)
{
printf("子串 \"%s\" 不在字符串 \"%s\" 中\n", str2, str1);
}
return 0;
}
```
阅读全文