子串的数目怎么计算

求子串个数的公式如果长度是7,那子串个数据就是7+6+5+4+3+2+1,以此类推 。

子串的数目怎么计算

文章插图
【子串的数目怎么计算】declare @baia int,@num int,@b varchar(200)
set @b='abcdefg'
set @a=0
set @num=0
while @a<len(@b)
begin
select @num=@num+len(@b)-@a
set @a=@a+1
end
select @num
扩展资料
取子串函数格式如下:
LEFT(<字符型表达式>,<数值型表达式>)
RIGHT(<字符型表达式>,<数值型表达式>)
SUBSTR(<字符型表达式>,<数值型表达式1>[,<数值型表达式2>])
功能:LEFT函数从字符型表达式左边的第一个字符开始截取子串,RIGHT函数从字符型表达式右边的第一个字符开始截取子串 。
若数值型表达式的值大于0,且小于等于字符串的长度,则子串的长度与数值型表达式值相同 。若数值型表达式的值大于字符串的长度,则给出整个字符串 。若数值型的表达式小于或等于0,则给出一个空字符串 。
-字符函数
数据结构:若串S=‘software’,其子串的数目是多少个?求解题过程首先,software没有重复字符,长度为8
1个字符的子串有8个;
2个字符的子串有8-1个;
3个字符的子串有8-2个;
7个字符的子串有8-6个;
8个字符的子串有8-7个 。
所以子串总数是1+2+3……+8=36个 。
很多情况下,子串有重复的情况,比如:abbbc,子串只有3+2+3+2+1=11个,而不是1+2+3+4+5=15个 。又如,abab,子串有2+2+2+1个 。所以在编程时,要去除重复子串的情况 。
扩展资料:
ab的子串:a、b、ab共3个即(2+1)个,abc的子串:a、 b、 c、 ab、 bc 、abc共(3+2+1)个,所以若字符串的长度为n,则子串的个数就是[n*(n+1)/2]个,"software"中子串的个数就是8+7+....+1=36个 。再加上一个空串,即为37个 。
对于有连续相同的子串(例如:AAABBBCCC)这样的子串的计算方法是n(n+1)/2+1-重复子串 。
-子串
C语言计算子字符串个数#include <stdio.h>
int countsub( char *str, char *ss )
{
int s=0;
for(;*str!='\0';str++)
{
if(*str==*(ss)&&*(str+1)==*(ss+1)&&*(str+2)==*(ss+2))
{
str=str+3;
s++;
break;
}
}
for(;*str!='\0';str++)
{
if(*str==*(ss)&&*(str+1)==*(ss+1)&&*(str+2)==*(ss+2))
{
s++;
str=str+2;
}
else break;
}
return s;
}
main( )
{
char s1[1000] = {0}, s2[100] = {0};
gets(s1);
gets(s2);
printf("%d\n", countsub( s1, s2 ) );
}
C语言求子字符串个数c:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
intcountsub(char*str,char*ss){
intlen=strlen(str),index=0,max=0;
int*maxStr=(int*)malloc(sizeof(int)*len);
for(index=0;index<len;++index){
maxStr[index]=0;
}
index=0;
for(inti=0;str[i]!='\0';++i){
intj=0;
for(;ss[j]!='\0'&&str[i+j]!='\0'&&ss[j]==str[i+j];++j);
if(j>0&&ss[j]=='\0'){
maxStr[index]++;
i+=j-1;
}else{
index++;
}
if(maxStr[index]>max)
max=maxStr[index];
}
returnmax;
}
intmain(){
chars1[1000]={0},s2[100]={0};
gets(s1);
gets(s2);
printf("%d\n",countsub(s1,s2));
return0;
}