【问题标题】:How can read a string and make it into different substring?如何读取一个字符串并将其变成不同的子字符串?
【发布时间】:2017-05-03 08:44:19
【问题描述】:

我有 2 条 RNA 链:1 个 G-enyzme 和 1 个 UC-Enyzme,如果您看到 G 酶中的 G 和 u 或 c 如果 u 表示 uc-enyzme,则用斜线将其拆分,反之亦然,这意味着您可以之后使用 u 或 c 作为 G-enyzme 和 g 作为 uc-enyzmes 我查找了几个关于破坏子字符串的代码,例如 substr,它们只能从 1 个位置到结束。有没有其他方法可以做到这一点?

示例: G-enyzme "AUCG, AUG, G, CU...."

输出:= AUC / G , AU/G , G , CU

如果没有G就让它结束,那么CU就是结束链

int main()
{
    string G_enyzme = "AUCG,AUG,G,CU,ACUAUACG";
    string U_C_enyzme = "GGAC,U,AU,GAU,C,U,AC,GC,AU";
    size_t g = G_enyzme.find('G');
    if(g != string::npos)  //if G position is found
    {
        //put a slash between AUC and G , AU and G, .... , ACUAUAC and G 
        //if the substring does not have G make it begin / end

    }
}

【问题讨论】:

  • 类似于 substr,它只能从 1 个位置到结束。 std::string::substr 可以获取任意长度的子字符串,从任意位置开始,而不仅仅是直到字符串的末尾。

标签: c++ string substring


【解决方案1】:

您的问题需要进一步澄清。我将介绍第一个案例,其余的留给你,因为这个

"and u or c if u for u.c-enyzme,反之亦然"

我不清楚。

#include <iostream>
#include <string>

std::string getStr(const std::string& str, const char& flag)
{
    std::string temp;
    // G-enyzme
    if ( flag == 'G' ){
        for ( int i(0); i < str.size(); ++i ){
            temp += str[i];
            if ( str[i] == 'G' ){
                temp.pop_back();
                temp += "/G";
            }
        }
    }
    //  U.C-Enyzme 
    if ( flag == 'U' ){
        //TODO  
    }
    return temp;
}


int main()
{
    std::string str ("AUCG, AUG, G, CU, ACUAUACG");
    std::cout << str         << std::endl;
    std::cout << getStr(str,'G') << std::endl;

    return 0;
}

输出是

AUCG, AUG, G, CU, ACUAUACG
AUC/G, AU/G, /G, CU, ACUAUAC/G

【讨论】:

  • @darkflames363,我没有 c++14。
猜你喜欢
  • 2020-07-11
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多