我正在尝试编写alil函数,它基本上是从字符串中读取的。它读取每三个字符并使用前置条件(if语句)对其进行评估。如果符合条件,它将用新的三个字母替换这三个字母。然后它会输出新的字符串。
我尝试编写代码,但似乎无法使逻辑正确。该程序运行但它不打印任何东西。不要介意功能名称和不准确性。我只是做一个示例函数来测试它。
string amino_acids(string line)
{
string acid;
string acids;
string newline;
for( int i= 0; i < line.length(); i++)
{
acid = line[i];
}
for (int i = 0; i < 3; i++)
{
acids = acid[i];
if(acids == "GUU")
{
acids = "ZAP";
}
newline = acids;
}
cout << "Acids: " <<newline <<endl;
return newline;
}
答案 0 :(得分:1)
使用std::string
运算符为[]
编制索引会产生char
,对于字符串来说恰好是一个重载的operator=
。
即使你正在循环,因为我相信你的意图(正如对问题的评论所提到的,你可能不是),因为酸(取一个字符的值)将永远不会等于三个字符你正在比较它的字符串。因此,不会进行替换。
要做你想做的事,试试这样的事情:
for (int i = 0; i + 3 < line.length(); i += 3) // counting by 3 until end of line
{
if (line.substr(i, 3) == "GUU") // if the substring matches
{
line.assign("ZAP", i, 3); // overwrite it with new substring
}
}
return line;
答案 1 :(得分:1)
for( int i= 0; i < line.length(); i++)
acid = line[i];
Say line包含“abcd”,此循环将执行:
acid = 'a';
acid = 'b';
acid = 'c';
acid = 'd';
只有最后一项作业才会产生持久影响。如果您需要实际从线上获取三个字符 - 您可能希望使用+=
将字符添加到acid
,而不是=
。但是,如果你循环遍历所有这样的行,你最终会做acid = line;
。我假设你想要更像acid = line.substr(0, 3)
的东西?
for (int i = 0; i < 3; i++)
{
acids = acid[i];
这会崩溃。 acid
绝对是单个字符串,您在第2次和第3次迭代时索引到acid[1]
和acid[2]
。当你学习C ++时,你可能应该使用.at(i)
,当你试图使用无效索引时会抛出异常 - 你可以捕获异常,至少有一些问题的迹象。原样,它是未定义的行为。
要使用,您需要try
/ catch
块...基本格式为:
int main()
try
{
...your code in here...
some_string.at(i);
}
catch (const std::exception& e)
{
std::cerr << "caught exception: " << e.what() << '\n';
}
更一般地说,尝试在代码中添加一些std::cout
语句,以便了解变量实际具有的值...您很容易看到它们不是您所期望的。或者,使用交互式调试器并观察每个语句执行的影响。
答案 2 :(得分:0)
从您的描述中读取,您需要类似的东西
//note below does not compile, its just psuedo-code
string amino_acid(const string& sequence){
string result = sequence; //make copy of original sequence
For i = 0 to sequence.length - 3
string next3Seq = sequence(i,3); //grab next 3 character from current index
If next3Seq == 'GUU' //if the next next three sequence is 'GUU'
then result.replace(i,3,'ZAP'); //replace 'GUU' with 'ZAP'
EndIf
EndFor
return result;
}
您可以将其用作代码的开头。祝你好运。
答案 3 :(得分:0)
根据我对你的问题的理解。我写了一些代码。请看下面
string acids;
string newLine;
int limit=1;
for(int i=0;i<line.length();i++)
{
acids=acids+line[i];
if(limit==3)//Every 3 characters
{
if(acids == "GUU")
{
acids = "ZAP";
}
limit=1;
acids=""
newline=newline+acids;
}
limit++;
return newline;
}