當前位置:首頁 » 編程語言 » 最長母音子串的長度c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

最長母音子串的長度c語言

發布時間: 2022-08-03 16:21:27

1. 如何使用c語言求解最長公共子字元串問題及相關的演算法

假定字元串採用堆分配方式,編寫一個程序,求兩個字元串S和T的一個最長公共子串

本題的思路:
本題要實現的演算法掃描兩個字元串。其中index指出最長公共子串在s中的序號,length指出最長公共子串的長度

堆分配存儲表示如下:
typedef struct{
char *ch;
int length;
}Hstring;

Status MaxComString(Hstring S,Hstring T,int &length){

index=0;
length=0;
i=0;

//令i作為掃描字元串S的指針
while(i<S.length){
j=0;
//令j作為掃描字元串T的指針
while(j<T.length){
if(s.ch[i]==T.ch[j]){
//找一個子串,其在字元串S中的序號為i,長度為length1
length1=i;
for(k=1;S.ch[i+k]==T.ch[j+k];k++)length1++;
if(length1>length){
//將較大長度值賦給index與length
index=i;
length=length1;
}
j=j+length1;//繼續掃描字元串T中第j=length1個字元之後的字元
}else{
j++;
}
}//while
i++;
}//while
printf("最長公共子串:");
for(i=0;i<length;i++)printf("%c",S.ch[index+i]);
return OK;
}

2. c語言求字元串長度

C語言中字元串長度的函數是strlen(),一個字元的長度為1;
函數原型:
unsigned int strlen (char *s);頭文件:
#include <string.h>參數說明:s為指定的字元串;
功能說明:strlen()用來計算指定的字元串s 的長度,不包括結束字元'\0';
返回值:返回字元串s 的字元數;
注意:strlen() 函數計算的是字元串的實際長度,遇到第一個'\0'結束。
示例:
#include<stdio.h>#include<string.h>int main(){ char str[] = "ab\nxyz";//\n為回車字元,佔一個位元組 printf("strlen(str)=%d\n", strlen(str)); return 0;}//輸出結果:strlen(str)=6 收起

3. C語言:鍵入一個不超過100字元的字元串,輸出其中最長子字元串和它的長度。咋寫

代碼文本:

#include "stdio.h"

int main(int argc,char *argv[]){

char str[101],i,j,k,x,y,m,f;

printf("Enter a string... str=");

scanf("%100s",str);

for(k=0;str[k];k++);

for(f=m=i=0;i<k;i++)

for(j=k-1;j>i;j--)

if(str[j]==str[i]){

for(y=j,x=i;x<y;x++,y--)

if(str[x]-str[y])

break;

if(x>=y && m<=j-i){

m=j-i+1;

f=i;

break;

}

}

printf(" The longest palindromic substring is '");

for(i=0;i<m;putchar(str[f++]),i++);

printf("' The length is %d ",m);

return 0;

}

4. C語言中字元串的長度如何比較例如:輸入5個字元,輸入其中最長的字

可以用strlen函數來求取字元串的長度,然後進行比較,得出最長的字元串,然後輸出即可
示例代碼如下:
#include<stdio.h>
#include<string.h>
void main()
{
char s[5][20];

int a[5]; //用於儲存字元串長度的數組

int i,max;

for(i=0;i<5;i++)

{

gets(s[i]); //輸入字元串

a[i]=strlen(s[i]); //求取字元串長度,並用數組保存

}

max=a[0];

for(i=0;i<5;i++)
if(a[i]>max)

max=a[i];

for(i=0;i<5;i++)
{

if(a[i]==max)

{

puts(s[i]);

break;

}

}

}

5. c語言 計算字元串長度

C語言的字元串是由字元數組形式保存的,並約定''(ascii碼值為0)作為字元串結束符。其長度為從字元串開始,到''結束,所有字元的個數,不包括''本身。

要獲得字元串長度,有兩種方法可以使用,使用庫函數strlen()。strlen聲明在string.h中,原型為int strlen(char *str);功能為求str的長度,並返回。對於字元串str, 可以用代碼求長度。當str[len]為0時,退出循環,退出後的len值就是str的長度。

拓展資料:使用strlen函數,包含在頭文件string.h里,功能就是計算字元串s的(unsigned int型)不包括''在內的長度。

6. C語言編程 查找兩字元串的最長公共子串 如"I am a student."與"R u a student"最長公共子串是"student"

//有個問題是,空格應該也算字元吧,所以沒考慮空格。就像你那個例子,最長公共字串應該是//「student」,包含空格.還有,就是我這個應該不是很好的方法,效率比較低,我是先讓串//1不動,串2先從第1個字元開始與串1比較,然後串2從第2個字元開始於串1比較,都比較完了,///串1向右挪動一個位置
#include<stdio.h>
intmain()
{
charstr1[100]={0},str2[100]={0};
printf("pleaseinputtwostrings: ");
gets(str1);//讀入字串
gets(str2);
char*p1=str1;//分別用來存str1和str2的當下比較位置
char*p2=str2;
intmax=0,num=0;//max存放比較後最長字串長度,num是這一輪比較公共字串長度
char*start;//存放最大串起始位置
while(*p1!='')//先是串1大循環
{
p2=str2;//p2是串2首地址
while(*p2!='')
{
char*begin=p1;//begin是串1當前比較位置
char*begin2=p2;//begin2是串2開始比較位置
num=0;//比較前初始化為0
while(*begin!=''&&*begin2!='')//一輪新的比較
{
if(*begin==*begin2)//若相同,num++;
{num++;begin++;begin2++;}
elsebreak;
}
if(num>max)//若新比較出的字串更長,則替換max值和start內容
{max=num;
start=p1;}
p2++;//串2右移1位
}
p1++;//串1右移1位
}
while(max--)//輸出串
printf("%c",*start++);
printf(" ");
}

7. C語言:「最長公共子串」 高手幫忙編個

描述]
現在有一些由英文字元組成的大小寫敏感的字元串,你的任務是找到一個最長的字元串[x],使得對於已經給出的字元串中的任意一個y,[x]或[反序後的x]是y的子串。

[關於輸入]
輸入的第一行是一個整數t (1 <= t <= 10),t表示測試數據的數目。對於每一組測試數據,第一行是一個整數n (1 <= n <= 100),表示已經給出n個字元串。接下來n行,每行給出一個長度在1和100之間的字元串。

[關於輸出]
對於每一組測試數據,輸出一行,給出題目中要求的字元串x的長度。

8. C語言 最長公共子串

首先指出樓主的錯誤
最長的公共子字元串 應該改成 最長的連續公共子字元串
下面是符合樓主要求的參考代碼
//作者:hacker
//時間:9.12.2006
#include <stdio.h>
#include <string.h>

void main()
{
char* x="aabcdababce";
char* y="12abcabcdace";
int m = strlen(x);
int n = strlen(y);
int i, j, k, l;
int maxlength = 0;
int start = 0;
int count = 0;//用來判斷是否匹配的變數

for (i=1;i<=n;i++)//匹配長度的循環
for (j=0;j<n-i+1;j++)//y的起始位置的循環
for (k=0;k<m-i+1;k++)//x的起始位置的循環
{
count = 0;
for (l=0;l<i;l++)//判斷是否匹配,代碼可以優化
if (y[j+l] == x[k+l])
count++;
if (count==i&&i>maxlength)
{
maxlength = i;//記錄最大長度
start = j;//記錄最大長度的起起位置
}
}

//作者:hacker
//時間:9.12.2006
#include <stdio.h>
#include <string.h>

void main()
{
char* x="aabcdababce";
char* y="12abcabcdace";
int m = strlen(x);
int n = strlen(y);
int i, j, k, l;
int maxlength = 0;
int start = 0;
int count = 0;//用來判斷是否匹配的變數

for (i=1;i<=n;i++)//匹配長度的循環
for (j=0;j<n-i;j++)//y的起始位置的循環
for (k=0;k<m-i;k++)//x的起始位置的循環
{
count = 0;
for (l=0;l<i;l++)//判斷是否匹配,代碼可以優化
if (y[j+l] == x[k+l])
count++;
if (count==i&&i>maxlength)
{
maxlength = i;//記錄最大長度
start = j;//記錄最大長度的起起位置
}
}

if (maxlength==0)
printf("No Answer");
else
for (i=0;i<maxlength;i++)
printf("%c",y[start+i]);
}

}
下面是真正的最長公共子串的動態規劃演算法
//作者:hacker
//時間:9.12.2006

#include <stdio.h>
#include <string.h>

int b[50][50];
int c[50][50];

void lcs(x,m,y,n)
char *x;
int m;
char *y;
int n;
{
int i;
int j;

for (i=1;i<=m;i++) c[i][0] = 0;
for (i=1;i<=n;i++) c[0][i] = 0;
c[0][0] = 0;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
if (x[i-1] == y[j-1])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}
else
if (c[i-1][j] > c[i][j-1])
{
c[i][j] = c[i-1][j];
b[i][j] = 2;
}
else
{
c[i][j] = c[i][j-1];
b[i][j] = 3;
}

}
}

void show(i,j,x)
int i;
int j;
char* x;
{
if (i==0||j==0)
return;
if (b[i][j]==1)
{
show(i-1,j-1,x);
printf("%c",x[i-1]);
}
else
if (b[i][j]==2)
show(i-1,j,x);
else
show(i,j-1,x);
}

void main()
{
char* x="aabcdababce";
char* y="12abcabcdace";
int m = strlen(x);
int n = strlen(y);
lcs(x,m,y,n);
show(m,n,x);

}

9. c語言計算給定字元串包含的最長對稱字元串的長度

#include "stdio.h"
#include "string.h"
int main(void)
{
char c[100],tmpc[100];
int len,i,j,k=0,max=0;
scanf("%s",c);
len=strlen(c);
for(i=0;i<len;i++)//將字元串中的所有子串用huihuan函數驗證一遍,雖然比較笨,但好理解
{
k=0;
for(j=i;j<len;j++)
{
tmpc[k]=c[j];
tmpc[++k]=0;
if(huihuan(tmpc))
{
if(k>max)max=k;//如果當前回環串的長度大於最長回環串長度,修改max
}
}
}
printf("%d",max==1?0:max);//為1也表示沒有,改為題目中要求的0
return 0;
}
int huihuan(char *c)//驗證一個字元串是否為回環串的函數
{
int len=strlen(c),i;
if(!len)return 0;
for(i=0;i<len/2;i++)
{
if(!(c[i]==c[len-1-i]))return 0;
}
return 1;
}