當前位置:首頁 » 編程語言 » 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;

}