![](/img/trans.png)
[英]Having trouble with string array searching for another string in my function
[英]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.