C语言用指针实现对给定字符串查找给定的子串并输出第一个子串所在的位置。
时间: 2024-05-04 13:17:57 浏览: 16
可以使用指针遍历字符串,找到子串的起始位置。以下是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100], substr[100];
printf("Enter a string: ");
gets(str);
printf("Enter a substring: ");
gets(substr);
char *ptr1 = str, *ptr2 = substr; // 定义两个指针分别指向字符串和子串
int pos = -1; // 用于记录子串的起始位置,初始化为-1表示未找到
while (*ptr1 != '\0') { // 遍历字符串
if (*ptr1 == *ptr2) { // 如果找到子串的第一个字符
char *tmp = ptr1; // 记录当前位置
while (*ptr2 != '\0' && *ptr1 == *ptr2) { // 检查子串是否匹配
ptr1++;
ptr2++;
}
if (*ptr2 == '\0') { // 如果子串匹配成功
pos = tmp - str; // 计算子串的起始位置
break; // 结束循环
} else { // 如果子串匹配失败,回到上一个位置
ptr1 = tmp;
ptr2 = substr;
}
}
ptr1++;
}
if (pos != -1) {
printf("The substring \"%s\" is found at position %d.\n", substr, pos);
} else {
printf("The substring \"%s\" is not found.\n", substr);
}
return 0;
}
```
需要注意的是,gets 函数不安全,容易导致缓冲区溢出,因此建议使用 fgets 函数代替。另外,以上代码仅查找第一个子串的位置,如果需要查找所有子串的位置,可以在找到第一个子串位置后继续向后遍历字符串,直到找不到为止。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)