2016-05-04 16 views
0

他のすべての文字と空白を取り除いてから、必要なものを削除するelse文を作成しようとしています。この機能は、ユーザが入力した文字を他の文字に変更することです。文字配列内の特定の文字とスペースを無視する方法

using namespace std; 
    void dna_to_rna(char rna[]) 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      if (rna[i] == 'a' || rna[i] == 'A') 
       rna[i] = 'U'; 
      else if (rna[i] == 'c' || rna[i] == 'C') 
       rna[i] = 'G'; 
      else if (rna[i] == 'g' || rna[i] == 'G') 
       rna[i] = 'C'; 
      else if (rna[i] == 't' || rna[i] == 'T') 
       rna[i] = 'A'; 
} 

他のすべての文字を削除するにはどうすればよいですか?

たぶん、このような
+4

あなたの質問は何ですか? – PcAF

+0

質問には言葉が貧弱です。私の前提は、あなたがacgtでない文字を無視したいということです。あれは正しいですか? –

+0

はいとスペース。 – VbaGGz

答えて

0

私は2番目の配列を作成し、探していた情報が必要な基準を満たしていれば、それを2番目の配列に配置し、配列内に配置する位置が、第2の変数tha配列内の適切な位置を数えるとcout配列

using namespace std; 
    void dna_to_rna(char rna[]) 
    { 
     int x = 0; 
     char newrna[100]; 
     for (int i = 0; i < 100; i++) 
     { 
      if (rna[i] == 'a' || rna[i] == 'A') 
      { 
       newrna[x] = 'U'; 
       x++; 
      } 
      else if (rna[i] == 'c' || rna[i] == 'C') 
      { 
       newrna[x] = 'G'; 
       x++; 
      } 
      else if (rna[i] == 'g' || rna[i] == 'G') 
      { 
       newrna[x] = 'C'; 
       x++; 
      } 
      else if (rna[i] == 't' || rna[i] == 'T') 
      { 
       newrna[x] = 'A'; 
       x++; 
      } 
     } 
1

using namespace std; 
void dna_to_rna(char rna[]) 
{ 
    string s = ""; 
    for (int i = 0; i < 100; i++) 
    { 
     if (rna[i] == 'a' || rna[i] == 'A') 
      s += 'U'; 
     else if (rna[i] == 'c' || rna[i] == 'C') 
      s += 'G'; 
     else if (rna[i] == 'g' || rna[i] == 'G') 
      s += 'C'; 
     else if (rna[i] == 't' || rna[i] == 'T') 
      s += 'A'; 
    } 
    strcpy(rna, s.c_str()); 
} 

アイデアは、一時的なバッファとしてのstd ::文字列を使用することです。文字列は空で始まります。次に、1つ1つの文字を追加します。ループが終了したら、std :: stringの内容をrna配列にコピーして戻します。

1

入力パラメータがstd::stringに変更することができるなら、あなたは、次の実装のいずれかを使用できます。

void dna_to_rna(std::string& rna) 
{ 
    auto it = rna.begin(); 
    while (it != rna.end()) 
    { 
     if  (*it == 'a' || *it == 'A') *it = 'U'; 
     else if (*it == 'c' || *it == 'C') *it = 'G'; 
     else if (*it == 'g' || *it == 'G') *it = 'C'; 
     else if (*it == 't' || *it == 'T') *it = 'A'; 
     else 
     { 
      it = rna.erase(it); 
      continue; // it already "points" to the next element 
     } 

     ++it; 
    } 
} 

std::string dna_to_rna(const std::string& dna) 
{ 
    std::string rna; 
    for (auto c : dna) 
    { 
     if  (c == 'a' || c == 'A') rna += 'U'; 
     else if (c == 'c' || c == 'C') rna += 'G'; 
     else if (c == 'g' || c == 'G') rna += 'C'; 
     else if (c == 't' || c == 'T') rna += 'A'; 
    } 

    return rna; 
} 
0

はあなたがはるかに簡単コード作るために、そして読みやすくするために:

using namespace std; 

void dna_to_rna(char rna[]) { 

    int arrLength = sizeof(rna)/sizeof(rna[0]); // Get size of array 

    for (int i = 0; i < arrLength; i++){ 
     if (toupper(rna[i]) == 'A'){ 
      rna[i] = 'U'; 
     } 
     else if (toupper(rna[i]) == 'C') { 
      rna[i] = 'G'; 
     } 
     else if (toupper(rna[i]) == 'G'){ 
      rna[i] = 'C'; 
     } 
     else if (toupper(rna[i]) == 'T'){ 
      rna[i] = 'A'; 
     } 
    } 
} 
+1

このように配列のサイズを取得することはできません。配列関数の 'rna'の' sizeof'は、配列ではなく 'char *'のサイズを返します。これは関数を呼び出す前に行う必要があります。 –

関連する問題