题解 | #子串计算#借鉴了大佬的思路

子串计算

https://www.nowcoder.com/practice/bcad754c91a54994be31a239996e7c11

#include <stdio.h>
#include <string.h>//给出一个01字符串(长度不超过100),求其每一个子串出现的次数

void func(char str[],char t[],int l){//递归函数,数组t[]表示子串。开头为0的子串(及其递归后产生的串)永远要排在开头为1的子串(及其递归后产生的串) 
	int sum=0;
	t[l]='0';t[l+1]='\0';//计算数组t下标为l的元素(即t[l])为'0'时,在str中出现的次数
	if(strlen(t)==strlen(str))return;//递归边界 
	char *p=str;
	while(p=strstr(p,t)){ 
		sum++;
		p=p+1;                  
	}
	if(sum>1)printf("%s %d\n",t,sum);
	func(str,t,l+1);//t串在递归中不断更新,核心是l变量不断加一 
	
	sum=0;
	t[l]='1';t[l+1]='\0';//计算数组t下标为l的元素(即t[l])为'1'时,在str中出现的次数
	char *q=str;
	while(q=strstr(q,t)){ 
		sum++;                                                                                 
		q=q+1;                  
	}
	if(sum>1)printf("%s %d\n",t,sum);
	func(str,t,l+1);
	
}
int main(){
char str[101],t[101];//数组t用来遍历所有可能出现的子串 
while(scanf("%s",str)!=EOF){
	func(str,t,0);
}

	return 0;
}
//strstr(str1,str2)函数用于找到子串(str2)在一个字符串(str1)中第一次出现的位置,并返回该位置的指针;如果找不到,返回空指针(NULL)

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
在太阳里长大的人:公司就仨人吧😂
点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-05 16:23
门头沟学院 Java
mengnankk:我投了300,约了5 6个面试。感觉项目写的太多了。一个项目就写五六个亮点,不是把整个项目的功能描述下。其他的没啥,简历看起来有点长
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务