字串位置

该博客介绍如何在主字符串S中找到指定子字符串T的首次出现位置。通过从左到右遍历主串,与子串进行比较,当找到匹配时,输出子串的起始下标。举例说明,若S为'hjhelpkl',T为'help',则T的位置是2。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求:

在主字符串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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值