我试图计算字符串类中的字符数,但由于某种原因,程序完全跳过我的函数。这只是主程序的测试代码,它仍然给我相同的结果。为什么跳过计数器功能?
#include <iostream>
#include <string>
using namespace std;
void prompt(string& dna)
{
cout << "Input: ";
getline(cin, dna);
}
void counter(const string DNA,
int* a_count, int* t_count, int* c_count, int* g_count)
{
for (int i = 0; i < DNA.size(); i++)
{
if (DNA.at(i) == 'a')
{
*a_count++;
}
else if (DNA.at(i) == 't')
{
*t_count++;
}
else if (DNA.at(i) == 'c')
{
*c_count++;
}
else if (DNA.at(i) == 'g')
{
*g_count++;
}
}
}
int main()
{
string dna;
int a = 0;
int t = 0;
int c = 0;
int g = 0;
prompt(dna);
if (! dna.empty())
{
cout << "Before:\n"
<< "A: " << a << endl
<< "T: " << t << endl
<< "C: " << c << endl
<< "G: " << g << endl;
counter(dna, &a, &t, &c, &g);
cout << "\n\nAfter:\n"
<< "A: " << a << endl
<< "T: " << t << endl
<< "C: " << c << endl
<< "G: " << g << endl;
}
system("pause");
return 0;
}
答案 0 :(得分:7)
你以错误的方式应用operator ++。它应该是:
if (DNA.at(i) == 'a')
{
(*a_count)++;
}
else if (DNA.at(i) == 't')
{
(*t_count)++;
}
else if (DNA.at(i) == 'c')
{
(*c_count)++;
}
else if (DNA.at(i) == 'g')
{
(*g_count)++;
}
答案 1 :(得分:4)
您在++和*运算符之间存在优先级问题。您正在递增指针地址,而不是值。 (*a_count)++;
是正确的。
答案 2 :(得分:1)
您可能会发现使用参考参数更容易,因为您实际上不需要做任何指针。即:
void counter(const string DNA, int& a_count, int& t_count, int& c_count, int& g_count)
并且,是的,switch语句会更整洁。