C++ 我的计数器未正确除以str.length()。C++;

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

我只需要一些帮助,将字符串/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;

    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')
就是你所需要的。