Функция подсчета символов пропускаемого строкового класса? - PullRequest
1 голос
/ 22 сентября 2011

Я пытался посчитать количество символов в строковом классе, но по какой-то причине программа полностью пропустила мою функцию.Это всего лишь тестовый код из основной программы, он все еще давал мне те же результаты.Почему функция счетчика пропущена?

#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 ]

7 голосов
/ 22 сентября 2011

Вы применяете оператор ++ неправильно.Должно быть:

    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)++;
    }
4 голосов
/ 22 сентября 2011

У вас проблема приоритета между операторами ++ и *.Вы увеличиваете адрес указателя, а не значение.(*a_count)++; будет правильно.

1 голос
/ 22 сентября 2011

Вместо этого вам может оказаться проще использовать опорные параметры для счетчиков, поскольку на самом деле вам не нужно делать какие-либо указатели на арифметику. то есть:

void counter(const string DNA, int& a_count, int& t_count, int& c_count, int& g_count)

И да, оператор switch будет более аккуратным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...