簡體   English   中英

填充字符串數組時遇到問題

[英]Having trouble filling string array

我的程序是DNA序列比對。 它通過搜索所有序列中順序相同的一系列字符來比較兩個DNA序列。

我遇到了障礙,非常感謝您的幫助。 我需要填寫對齊矩陣,以便最終看起來像這樣:

輸出值

這只是一個例子,兩個DNA字符串的大小可以是我從一個單獨的文件中得出的,但我已經掌握了所有這些大小。 我實際上只需要幫助就可以將其放入矩陣中。

因此,起初我在考慮制作2D char數組,但后來切換到2D字符串數組,因為我的DNA序列存儲在兩個字符串中。

填充MTX的准則:

頂行上的所有插槽都應設置為間隙罰分乘以其索引,即0 * gap,1 * gap,2 * gap…

沿左列的所有插槽應設置為間隙罰分乘以其索引,即0 * gap,1 * gap,2 * gap…

從最左上角最空的插槽開始,從左至右,從上到下開始工作,應根據以下約束條件填充每個插槽:如果每個與插槽位置相對應的DNA字符串的字母相同,則插槽的值應該是對角線的上,左插槽的值加上比賽得分

如果與插槽位置相對應的每個序列的字母不同,則該插槽的值應為以下值的最大值:o上插槽的值加上間隙罰分o左插槽的值加上間隙罰分o對角線向上和左插槽的值加上不匹配罰分

這是我有一些代碼:

int match = 1;
int mismmatch = 7;
int gap = -1;

string seq1 = "GAATTCAGTA"; //DNA sequence 1: GAATTCAGTA
string seq2 = "GGATCGA"; //DNA sequence 2: GGATCGA

int DNA1Size = seq1.length();
int DNA2Size = seq2.length();

string mtx[DNA2Size][DNA1Size];

matrix[0][0] = " ";
matrix[0][1] = "-";
matrix[1][0] = "-";

for(int i = 2; i < DNA2Size; i++)
{
    mtx[i] = seq2.at(i);     //Hoping this would initialize the first row with sequence 2 
}

for(int z = 2; z < DNA1Size; z++)
{
    mtx[z] = seq1.at(z);    ////Hoping this would initialize the first column with sequence 1
}

所以,我知道這是錯誤的,但是到目前為止我已經知道了。 這是我嘗試使用指定的字母和空格/破折號初始化第一行和第一列。 另外,應該使用間隙,匹配和不匹配來初始化矩陣的其余部分,但是由於我還沒有得到這一部分,所以我還沒有開始。 如果有人可以幫助,我會永遠愛你!

這種方法應該可以幫助您:

#include <iostream>
#include <string>
#include <vector>

using std::string;
using std::vector;
using Matrix = vector<vector<string>>;

int main()
{
    string seq1 = "GAATTCAGTA"; //DNA sequence 1: GAATTCAGTA
    string seq2 = "GGATCGA"; //DNA sequence 2: GGATCGA

    int DNA1Size = seq1.length();
    int DNA2Size = seq2.length();
    const int numHdrCells = 2;

    Matrix matrix(DNA2Size + numHdrCells, vector<string>(DNA1Size + numHdrCells));
    matrix[0][0] = " ";
    matrix[0][1] = "-";
    matrix[1][0] = "-";

    for (int i = 0; i < DNA1Size; i++) {
        matrix[0][i + numHdrCells] = seq1.at(i);     //Hoping this would initialize the first row with sequence 1
    }

    for (int z = 0; z < DNA2Size; z++) {
        matrix[z + numHdrCells][0] = seq2.at(z);    ////Hoping this would initialize the first column with sequence 2
    }
    std::cout << "Hello World!\n";
}


如果要在開頭存儲“”和“-”符號,則需要考慮到比行的大小多2行和更多列。

要填充矩陣中的第一行,請將行的索引保持為0,並更改列(單元格)的循環索引。 要填充列,您需要執行相反的操作-保留列0的索引並更改行的索引。 解決方案示例:

string seq1 = "GAATTCAGTA"; //DNA sequence 1: GAATTCAGTA 
string seq2 = "GGATCGA"; //DNA sequence 2: GGATCGA

int DNA1Size = seq1.length();
int DNA2Size = seq2.length();
int i, rows, columns;
rows = DNA2Size + 2;
columns = DNA1Size + 2;

char matrix[rows][columns]; //some compiler allow to define matrix this way

matrix[0][0] = ' ';
matrix[0][1] = '-';
matrix[1][0] = '-';

for (i=0; i<DNA2Size; i++)
  matrix[i+2][0] = seq2.at(i);  //filling first column

  for (i=0; i<DNA1Size; i++)
    matrix[0][i+2] = seq1.at(i); //filling first row

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM