C语言编程练习11——找子串

    xiaoxiao2025-07-21  11

    题目要求:

    在主字符串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; }
    最新回复(0)