函数计数字符串类的字符被跳过?

时间:2011-09-22 04:39:30

标签: c++ function

我试图计算字符串类中的字符数,但由于某种原因,程序完全跳过我的函数。这只是主程序的测试代码,它仍然给我相同的结果。为什么跳过计数器功能?

#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;
}

3 个答案:

答案 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语句会更整洁。