C++ 我的计数器未正确除以str.length()。C++;
我只需要一些帮助,将字符串/DNA链中Gs和Cs的计数器除以DNA链的长度,得到一个表示字符串中Cs和Gs百分比的双精度。然而,当我将计数器除以DNA.length()时,它返回0。它没有给我实际的答案/按产品。请帮忙C++ 我的计数器未正确除以str.length()。C++;,c++,string,for-loop,C++,String,For Loop,我只需要一些帮助,将字符串/DNA链中Gs和Cs的计数器除以DNA链的长度,得到一个表示字符串中Cs和Gs百分比的双精度。然而,当我将计数器除以DNA.length()时,它返回0。它没有给我实际的答案/按产品。请帮忙 #include <iostream> #include<string> using std::string; using std::cout; using std::endl; using std::cin; doubl
#include <iostream>
#include<string>
using std::string; using std::cout; using std::endl; using std::cin;
double get_gc_content(const string& dna)
{
int counter = 0;
for(std::size_t i = 0; i < dna.size();++i)
{
if(char(dna[i]=='C') || char(dna[i]=='G'))
{
counter++;
// cout<<counter<<endl;
}
}
cout<<counter<<endl;
double gc_content = counter / dna.length();
return gc_content;
}
int main()
{
std::string dna = "ACCGCAAATT";
double gc_count;
gc_count = get_gc_content(dna);
cout<<gc_count<<endl;
return 0;
}
#包括
#包括
使用std::string;使用std::cout;使用std::endl;使用std::cin;
双重获取gc内容(常量字符串和dna)
{
int计数器=0;
对于(std::size_t i=0;i
double gc_content = counter / dna.length();
执行整数除法,因为分子和分母都是整数类型。因此结果将被截断为整数并存储在gc\u content
中
如果gc\u content
是一个双精度,这无关紧要——在值存储在gc\u content
中之前,除法的结果已经发生。在您的情况下,可能dna.lengh()
小于计数器,因此您得到的值是0.0
解决方案是确保将计数器
或dna.length()
转换为双精度
,以便实际发生浮点除法
double gc_content = static_cast<double>(counter) / dna.length(); // For example.
double gc_content=static_cast(counter)/dna.length();//例如。
仔细查看以下表达式:
double gc_content = counter / dna.length();
您正在将整数值计数器
除以另一个整数dna.length()
,此操作的结果也将是一个整数值。因为计数器
在您的示例中,此操作的结果为0
。接下来,此结果将转换为双精度
,并分配给gc\u content
要正确计算gc\u内容
,需要在操作之前将整数值转换为double
。也就是说,您可以编写:
double gc_content = double(counter) / double(dna.length());
现在,操作的结果将是一个double
值,然后将该值分配给gc\u content
在if
条件下,您的代码中还有另一个缺陷。当您计算`
char(dna[i]=='G')
您正在计算一个bool
值,该值由表达式dna[i]='G'
产生,然后将该值转换为char
。接下来,再次将该值转换为bool
,以评估if
语句的条件
您只需使用:
if(dna[i] == 'C' || dna[i] == 'G')
因为std::string
类中重载的运算符[]
已经返回了char
类型。double gc\u content=counter/dna.length()
--整数除以整数将得到一个整数。这并不能解决问题,但要去掉if
语句中的char
强制转换。if(dna[i]='C'| | dna[i]='G')
就是你所需要的。