当前位置:首页 » 编程语言 » c语言最小不重复子串
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言最小不重复子串

发布时间: 2022-07-06 17:24:32

1. 用c语言编写程序,找出用户输入的两个字符串中相同的子串,要求此输出的字符串中无重复的子串

//利用经典的大数据处理算法bloomfilter进行两个集合中相同元素的查找,去重
#include<stdio.h>
#include<string.h>
unsignedcharmask[8]={128,64,32,16,8,4,2,1};
//简单的哈希算法
inthashfuc(char*s,intkey)
{
inti,seed[4]={5,7,11,13},value=0;
if(key>=4)key%=4;
for(i=0;s[i];i++)
value+=s[i]*seed[key];

returnvalue;
}

//利用bloomfilter算法将字符串s映射到位数组m中,并去掉重复的子串
voidbloomfilter(unsignedchar*m,char*s)
{
inti,j,hvalue,brepeat;
charsubstr[32];
for(i=j=0;;i++){
if(s[i]!=''&&s[i]!=' '&&s[i]!=0)
substr[j++]=s[i];
else{
substr[j]=0;
brepeat=1;
for(j=0;j<4;j++){
hvalue=hashfuc(substr,j)&0X7F;
if((m[hvalue>>3]&mask[hvalue&7])==0){
m[hvalue>>3]|=mask[hvalue&7];
brepeat=0;
}
}
//如果是重复子串
if(brepeat==1){
j=strlen(substr);
strncpy(s+i-j,s+i+1,strlen(s)-i);
//printf("有重复子串%s,去重后是%s ",substr,s);
i=i-j-1;
}
if(s[i]==0)break;
j=0;
}
}
}

intmain()
{
chars1[256],s2[256],substr[32];
inti,j,hvalue;
unsignedcharm1[16]={0},m2[16]={0},m3[16];
printf("Firststring ");
gets(s1);
printf("Secondstring ");
gets(s2);
bloomfilter(m1,s1);
bloomfilter(m2,s2);
//求两个位数组的交集,子串能够映射到交集说明是相同的子串
for(i=0;i<16;i++){
m3[i]=m1[i]&m2[i];
//printf("%02x%02x%02x ",m1[i],m2[i],m3[i]);
}
printf(" 相同的子串有:");
j=0;
//只需要对一个字符串进行映射,只要能映射到交集的就是子串
for(i=0;;i++){
if(s1[i]!=''&&s1[i]!=' '&&s1[i]!=0)
substr[j++]=s1[i];
else{
substr[j]=0;
for(j=0;j<4;j++){
hvalue=hashfuc(substr,j)&0X7F;
if((m3[hvalue>>3]&mask[hvalue&7])==0)break;
}
if(j==4)printf("%s",substr);
if(s1[i]==0)break;
j=0;
}
}
printf(" ");
}

2. (C语言)输入3个字符串,将其中最小的输出。

eeeee
就是最小的啊
你是不是要输出最短的啊
如果是
就要用strlen()
而不是strcmp()

3. C语言 输入一个字符串 去掉重复的字符,输出无重复的

统计字符串中的重复字符,可以通过简单哈希算法来实现。
有效的字符的ascii值在0-127之间,定义一个128位的数组,初始化为0,用数组下标对应相应的字符,数组元素值表示字符出现的频率,统计相应字符的个数,个数大于1的字符就是重复的。
参考代码如下:
#include
void main()
{
char s[1024];
int carr[128]={0};
int i;
printf("input a string: ");
gets(s);
for( i=0;s[i];i++ )
{
int index=s[i];
if ( index >=0 && index <= 127 ) //安全处理,防止输入异常时,程序出错
carr[index]++ ;
}
for( i=0;i<128;i++ )
if ( carr[i] > 1 )
printf("%c:%d\n", i, carr[i] );
}运行结果:
input
a
string:
hello
world
l:3
o:2

4. c语言输出最大和最小的字符串

char str[200];
scanf("%s",str);
char min,max;
int minid,maxid;
int i=0;
min=max=str[0];
maxid=minid=0;
while(str[i]!='\0') {
if (str[i]>max) {
max=str[i];
}
if (str[i]<min) {
min=str[i];
minid=i;
}
i++;
}
i=0;
while(str[i]!='\0') {
if (str[i]==max) {
printf("最大元素是%c 位置%d\n",max,i);
}
if (str[i]==min) {
printf("最小元素是%c 位置%d\n",min,i);
}
i++;
}
大概逻辑就是这样 吧,希望对你有帮助。

5. c语言,输出最小的字符串。

for(i=1;i<5;i++){
scanf("%s",str);
if(min>str[i])
min==str;
}
这个循环写的有问题.每次循环输入一个字符串,然后如果一个字符窜大于一个字符???你写的循环是这个意思啊

6. C语言代码,输出以下三个字符串中的最小字符串。

#include<string.h>
#include<stdio.h>
intmain()
{
chart[3][20]={"google","","yahoo"};
if(strcmp(t[0],t[1])>0)strcpy(t[0],t[1]);
if(strcmp(t[0],t[2])>0)strcpy(t[0],t[2]);
puts(t[0]);

}
/*运行结果:

*/

7. C语言输出最小的字符串

复制字符串不能用=,必须用strcpy函数。
strcpy(s,str[i+1]);

8. 有C语言编程,输入一个字符串,求这个字符串中不重复的字母的个数(大小写区分)

#include<stdio.h>
#include<ctype.h>
int main(void)
{
char str[100]={'\0'};
int a[100]={0},i=0,n=0;
printf("请输入字符串:");
gets(str);
for(i=0;i<100;i++)
{
if(isalpha(str[i]))
a[str[i]-65]++;
}
for(i=0;i<100;i++)
{
if(a[i]==1)
n++;
}
printf("共有不重复的字母%d个\n",n);
return 0;
}

你看这个行不。。。

9. c语言问题 给定一个字符串(长度小于等于100),要求输出没有重复字符的最长的子串。

#include"stdio.h"
#include<stdlib.h>
#include"time.h"
intmain(intargc,char*argv[]){
chars[101],i,j,k,t,m[101];
srand((unsigned)time(NULL));
for(t=rand()%100+1,i=0;i<t;s[i++]=rand()%94+33);//产生随机字符串
s[i]='';//字符串结束符
printf("%s Theresultis(are)asfollows: ",s);//打出原字符串
for(i=0;s[i];i++){//找不重复字符串,长度对应放入数组m
for(m[i]=1,j=i+1;s[j];j++,m[i]++){//从第i+1个字符开始检查,若没有重复则m[i]增1
for(k=i;k<j;k++)//看看第j(j=i+1~结束)个字符与前面到i是否重复
if(s[j]==s[k])//有重复则结束本次检查
break;
if(k<j)//这是代码需要:有重复时退出第二个for...
break;
}
}//检查完毕
for(k=0,i=1;i<t;i++)//遍历m,找出第一个长度最大的下标存入k
if(m[i]>m[k])
k=i;
for(i=0;i<t;i++)//遍历m
if(m[i]==m[k]){//凡与第一个最大长度相等的
for(j=0;j<m[k];printf("%c",s[i+j++]));//则将下标对应的s中的"长度个"字符输出
printf("");//各最长不重复字符串间用空格隔开
}
printf(" ");
return0;
}

运行样例:

10. c语言,怎样算字符串的个数(不重复)

这是统计字符串的不同字符的个数啊。

#include<stdio.h>

int main()

{char s[200];

int i,a[96]={0},n;

gets(s);

for(i=0;s[i];i++)

a[s[i]-32]=1;

for(n=i=0;i<96;i++)

n+=a[i];

printf("%d ",n);

return 0;

}