#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)