① 怎麼用c語言實現輸出某個字元串的所有子串
三重循環即可
voidprint_all_sub(char*s)
{
inti,j,k;
for(i=0;s[i];i++)//遍歷每個元素。
{
for(k=1;s[k+i-1];k++)//計算以s[i]開始長度為k的子串
{
for(j=0;j<k;j++)//輸出子串。
{
printf("%c",s[i+j]);
}
printf(" ");
}
}
}
② 急急C語言查找子字元串
char* search(char* str, char ch)
{
char *pmax, *p, *p1;
int max;
pmax = NULL;
max = 0;
p = str;
while(1)
{
while(*p != NULL && *p !=ch) p++;
if(*p== ch)
{
for(p1=p++; *p==ch; p++);
if(p-p1 > max)
{
max = p-p1;
pmax = p1;
}
}
}
return pmax;
}
③ c語言求一個字元串里有幾個子串
#include
#include
int substring(char *str,char *str1);//函數原型
int main(void)
{
char str[64]={0};
char str1[16]={0};
int i,j,x;
printf("please put the string\n");
gets(str);//輸入的原字元串
puts(str);
printf("\n");
printf("please put the string1 \n");
gets(str1);//輸入的字元串中的子串
puts(str1);
printf("\n");
i=strlen(str);//原字元串長度
j=strlen(str1);//子串長度
printf("the string lenth is %d\n",i);
printf("the string lenth is %d\n",j);
x=substring(str,str1);
printf("then anwser is %d\n",x);
return 0;
}
int substring(char *str,char *str1)
{
int x=0;
char *p;//任意附個初始值
do{
p=strstr(str,str1);//1.p指針指向strstr的返回值。3.再一次循環到 這里函數的參數發生變化,p重新指向strstr返回值,如此循環。
if(p != NULL) {
str=p+1;//2.str同樣指向strstr返回值p的下一個地址。
x=x+1;
}
}while(p!=NULL);
return x;
}
另一種方法,不用庫函數來實現,來自他人。。。
int substring1(char *str,char * str1,int n,int m)
{
int i,j=0,k;
int x=0;
for(i=0;i<=n-m;i++) {
k = i;
while (1) {
if (str[k] != str1[j] ) {
j=0;
break;
} else if (str1[j+1] == '\0') {
x++;
j=0;
break;
} else {
k++;
j++;
}
}
}
return x;
}