题目要求:
在主字符串S中找到指定的子字符串T,且输出第一次出现T的位置(即T的首字母下标),假设主子符串S为 “hjhelpkl”, T子字符串为 “help”, 那么T的位置是2;
思路:
在主串S中从左往右遍历与字串T长度相等的字符,第一次遍历的是hjhe, 第二次遍历的是jhel…,当两者相等时,输出位置
#include<stdio.h>
#include<string.h>
#define MAX 100
/*
在主串a中每次取出n个相连的字符,保存到数组a中
pos是从主串中开始找的位置,从1开始
len是子字符串n的长度
注意字符串需要在末尾加字符串终止标志'\0'
*/
void substring(char *a, char *zhuC, int pos, int len) { // pos从1开始
int k = 0;
for (int i = pos; i < pos + len; i++) {
a[k] = zhuC[i - 1];
k++;
}
a[k] = '\0';
}
int main(void) {
char zhuC[MAX]; // 主串
char ziC[MAX]; // 字串
char a[MAX];
int m, n, pos = 1, flag = 0; // m是主串长度 n是字串长度 flag是标识符,用来判断主串中是否存在字串
scanf("%s %s", zhuC, ziC);
m = strlen(zhuC);
n = strlen(ziC);
while (pos <= m - n + 1) {
substring(a, zhuC, pos, n);
if (strcmp(a, ziC) == 0) {
flag = 1;
printf("存在字串,位置为:%d", pos - 1);
break;
}
pos++;
}
if (flag == 0)
printf("不存在字串!");
return 0;
}