第一篇博客

2022-04-05 第一次-test

-------------------------

2022-04-07 strlen() 函数返回值为unsigned int 或unsigned long 所以与负数比较会导致结果有误。

#include <stdio.h>
#include <string.h>
int checkCG(char str[],int i,int j);
int checkGC(char str[],int i,int j);

//DNA序列检测CCCGGG并切段重组
//输入两行不过长的DNA序列 例:
//CCCGGGGGGCCCCCCGGGCGCGCGGC
//GGGCCCCCCGGGGGGCCCGCGCGCCG
int main(){
    char str1[100]={0},str2[100]={0},strTrans[100]={0};
    int i=0,j=0,k=0,count,check=0,strBreak[100]={-1};
    scanf(" %s %s",str1,str2);
    
    for(i=0;i<strlen(str1);i+=2){
        check=checkCG(str1,i,strlen(str1)-1);
        if(check!=0){
            j++;
            strBreak[j]=check;
            i=check-2;
        } 
    }
    for(i=0;i<strlen(str1);i+=2){
        check=checkGC(str1,i,strlen(str1)-1);
        if(check!=0) {
            j++;
            strBreak[j]=check;
            i=check-2;
        } 
    }
        
    //对strBreak排序 冒泡排序 
    for(count=1;strBreak[count]!=0;count++);
    
    for(i=0;i<(count-1);i++){
        for(j=0;j<count-1-i;j++){
            if(strBreak[j]>strBreak[j+1]){
                k=strBreak[j+1];strBreak[j+1]=strBreak[j];strBreak[j]=k;
            }
        } 
        
    }
    
    strBreak[count]=100;

    //改变顺序 str1
    k=0;
    strcpy(strTrans,str1);
    for(i=count-1;i>=0;i--){
        for(j=strBreak[i];j<strBreak[i+1]&&((j+1)<strlen(strTrans));j++){
            str1[k]=strTrans[j+1];
            k++;
        }
    }
    if(k<100) str1[k]='\0';
    //改变顺序  str2
    k=0;
    strcpy(strTrans,str2);
    for(i=count-1;i>=0;i--){
    //下行代码,(j+1)处理,因j可能为-1;
for(j=strBreak[i];j<strBreak[i+1]&&((j+1)<strlen(strTrans));j++){ str2[k]=strTrans[j+1]; k++; } } if(k<100) str2[k]='\0'; printf("%s\n%s\n",str1,str2); return 0; } //检测是否有“CCCGGG” int checkCG(char str[],int i,int j){ int check=0; for(;i<=j;i++){ if(str[i]=='C'){ if(check<3) check++; else if(check=3); else check=1; } else if(str[i]=='G'){ if(check>=3&&check<=5) check++; else if(check<3) check=0; if(check==6) break; } else check=0; } if(check==6) return i-3; else return 0; } //检测是否有“GGGCCCC” int checkGC(char str[],int i,int j){ int check=0; for(;i<=j;i++){ if(str[i]=='G'){ if(check<3) check++; else if(check=3); else check=1; } else if(str[i]=='C'){ if(check>=3&&check<=5) check++; else if(check<3) check=0; if(check==6) break; } else check=0; } if(check==6) return i-3; else return 0; }

 

posted @ 2022-04-07 15:59  我住在三楼  阅读(47)  评论(0)    收藏  举报