2012-10-24 159 views
0

我是一個新的c編程,所以我不理解爲這個過程工作。將字符串拆分成一些大小的字符數組

我有一個像下面的方式定義的結構。

struct codons 
{ 
    char amino_acid[20], slc[20], dna_codon[40]; 
}; 

struct codons c1 = {"Isoleucine", "I", "ATT, ATC, ATA"}; 
struct codons c2 = {"Leucine", "L", "CTT, CTC, CTA, CTG, TTA, TTG"}; 

用戶必須輸入字符串序列。例如:

printf("Enter the sentence: "); 
gets(str); 

如果用戶輸入的字符串,如:

ATTCTGCTTTTA 

然後我具有與本字符串轉換爲3char長度字符串等

ATT, CTG, CTT, etc. 

然後,我要檢查是否這3個字符串的短串沒有出現在結構中。

我沒有任何想法如何將字符串轉換爲3char字符串長度並檢查。
任何人都可以給我一些建議嗎?

+1

您需要顯示結構是如何聲明的。顯示它如何初始化並不完全相同。 – unwind

+0

[你的代碼到目前爲止?](http://mattgemmell.com/2008/12/08/what-have-you-tried/)至少你可以從用戶那裏獲得輸入並存儲它的權利? – Mike

+0

已更新代碼 – sam

回答

2

你可以做類似如下:

char* input_string = ...; 

//check if user entered string that could be divided into 3 letters substrings 
if (strlen(input_string) % 3 != 0) 
    return; 

while (*input_string != '\0') 
{ 
    char string_3l[4] = {'\0'}; 
    strncpy(string_3l, input_string, 3); 

    //check if string_3l is part of structure 
    if ((strstr(string_3l, c1.dna_codon) != NULL) || 
       (strstr(string_3l, c2.dna_codon) != NULL)) 
    { 
     //YOU HAVE MATCH! 
    } 

    input_string += 3; 
} 

當然,你應該檢入c1和c2結構。

+0

非常感謝 – sam

+0

爲什麼你拿* tmp_str? – sam

+0

對不起,這是在第一個版本中需要的。由於不再需要,您可以忽略它。 – codewarrior

3

得到一個字符串的前3個字符只分配該大小的緩衝區,並把有這些字符:

char substring[4]; 
strncpy(substring, input, 3); 
char substring[3] = '\0'; 

然後使用的strstr檢查一個字符串「可能性」包含子:

if (strstr(possibilities, substring) != NULL) 
    // ... 

(你沒有張貼的結構定義的評論稱,這樣我就可以不上的「可能性」的真正名稱更準確),如果你想繼續

,只是做了一些指針算法和重複所有步驟:

strncpy(substring, input + 3, 3) 
// and so on... 

(笑,我讀了「避孕套」)

+0

:P(用於安全套)... bdw tx for ur回覆。我會嘗試一下nw – sam

+2

我認爲你應該使用'char substring [4];'並在末尾添加終止字符(例如substring [3] ='\ 0';) – codewarrior

+0

@codewarrior:是的,我應該,謝謝。我忘了strstr,只是認爲strNcpy。我正在編輯。 – effeffe