📅  最后修改于: 2023-12-03 14:59:38.162000             🧑  作者: Mango
在C语言中,字符串是以字符数组的形式存储的。因此,对于一个字符串,我们可以通过遍历数组中的每个元素来实现字符串的各种操作,包括长度计算、比较、查找、替换等等。
本文将介绍C语言中常见的字符串问题之一:如何在字符串中查找一个子串并返回它的位置。
给定一个大字符串str
和一个子串substr
,请编写一个函数find_substring
来查找子串在大字符串中第一次出现的位置,如果没有找到则返回-1。
函数原型为:
int find_substring(char *str, char *substr);
要解决这个问题,我们需要遍历大字符串中的每个字符,依次比较它和子串中的字符是否相等。如果相等,则继续比较下一个字符;如果不相等,则从大字符串的下一个字符开始重新比较。
在比较过程中,需要记录下子串在大字符串中的起始位置,以便在最终找到子串时返回正确的位置。
具体的实现可以参考下面的代码:
#include <stdio.h>
#include <string.h>
int find_substring(char *str, char *substr) {
int i, j, start;
for (i = 0; str[i] != '\0'; i++) {
start = i;
// 依次比较str[start]和substr[j]是否相等
for (j = 0; substr[j] != '\0'; j++, start++) {
if (str[start] != substr[j]) {
break;
}
}
// 如果子串的所有字符都匹配成功,则返回子串在大字符串中的位置
if (substr[j] == '\0') {
return i;
}
}
// 没有找到子串,返回-1
return -1;
}
int main() {
char str[] = "hello, world!";
char substr[] = "world";
int pos;
pos = find_substring(str, substr);
if (pos != -1) {
printf("substring \"%s\" found at position %d\n", substr, pos);
} else {
printf("substring \"%s\" not found\n", substr);
}
return 0;
}
代码片段中,函数find_substring
依次遍历大字符串中的每个字符,使用start
记录子串在大字符串中的起始位置。在比较时,只要发现某个字符不匹配就立即终止比较,然后从大字符串的下一个字符开始重新比较。
在最终找到子串时,返回子串在大字符串中的位置;如果没有找到,则返回-1。
以上代码在运行时的输出结果为:
substring "world" found at position 7
本文介绍了如何在C语言中查找子串在大字符串中的位置。具体的实现采用了一次遍历加一次循环的方式,代码简单清晰,易于理解。
需要注意的是,在比较字符串时,一定要考虑到字符串末尾的空字符\0
。如果不注意这个细节,可能会导致一些比较错误,从而影响程序的正确性。