【发布时间】:2012-11-18 07:27:24
【问题描述】:
这是我编写的第一个 C++ 程序,但我无法理解必须放入操作数的顺序。这是一个类,但看起来我不应该使用作业标签.对不起,如果我做错了。
这是我的意见
// Get DNA string
string st;
cout << "Enter the DNA sequence to be analysed: ";
cin >> st;
这似乎工作正常,但我想我会包括它,以防这是我做错了。
到目前为止,这是我检查输入是否完全是 C、T、A 或 G 的内容。 它运行整个程序并简单地打印“请输入有效的序列 1,请输入有效的序列 2,……等等。我确定我在做一些非常愚蠢的事情,我就是想不通。
// Check that the sequence is all C, T, A, G
while (i <= st.size()){
if (st[i] != 'c' && st[i] != 'C' && st[i] != 'g' && st[i] != 'G' && st[i] != 't' && st[i] != 'T' && st[i] != 'a' && st[i] != 'A');
cout << "Please enter a valid sequence" <<
i++;
else if (st[i] == c,C,G,t,T,a,A)
i++;
我程序的后半部分是统计序列中Cs和Gs的个数
for (i < st.size() ; i++ ;);
for (loop <= st.size() ; loop++;)
if (st[loop] == 'c')
{
count_c++;
}
else if (st[loop] == C)
{
count_c++;
}
else if (st[loop] == g)
{
count_g++;
}
else if (st[loop] == G);
{
count_g++;
}
cout << "Number of instances of C = " << count_c;
cout << "Number of instances of G = " << count_g;
它似乎没有循环,它会计算其中一个字母的 1。我如何让它循环?我似乎无法输入 endl;任何地方都不会返回错误,尽管我知道我会在某个地方需要它。
任何帮助或提示我正确的方向将不胜感激 - 我已经在这段代码上工作了两天(承认这很尴尬)。
编辑:
我的序列检查器现在看起来像这样:
while (i < st.size() ) {
if (st[i] != c && st[i] != C && st[i] != g && st[i] !=G && st[i] !=t && st[i] !=T && st[i] !=a && st[i] != A)
cout << "Please enter a valid sequence" << "\n" << "\n";
i++;
}
我的计数器是这样的:
// Count the number of Cs and Gs
count_c = 0;
count_g = 0;
for (i = 0; i < st.size() ; i++) {
if ((st[i] == 'c') || (st[i] == 'C'))
count_c++;
else if ((st[i] == 'g')|| (st[i] == 'G'));
count_g++;
}
cout << "Number of instances of C = " << count_c;
cout << "Number of instances of G = " << count_g;
【问题讨论】:
-
您的 for 循环缺少第一部分。
-
这段代码不能编译,即使编译了,它也不会像你声称的那样做
-
我并没有声称它有任何作用!我在寻求帮助。不过,它现在正在为我编译 - 但它会重复计算我的 gs,我会在一分钟内编辑我的帖子。
-
@MooingDuck,如果您的意思是 for 循环,就编译器所知,它们是有效的。
loop++是一个有效的布尔表达式,如果loop不是某个没有可用转换的类并且其他两个不必严格遵循声明/赋值和递增。 -
我可能会制作一个字符映射来计数并运行
for_each,检查每个字符是否在映射中,并增加适当的计数器。作为一种可能效率较低的解决方案,您可以将字符串设置为大写或小写,并为四个字母中的每一个使用std::count。但是,对于每个输入一次四个字母,性能差异可以忽略不计,因此后者可能是更好的解决方案。
标签: c++ string for-loop if-statement