Преобразование строки в задачи int в C ++

0

Извините за любые ошибки, первый раз спрашивая здесь. поэтому у меня есть эта функция, где у меня есть векторный тип с именами и десятками игроков в игре, в то время как я пытаюсь сделать ранжирование стены. в этой конкретной части программы мне нужно преобразовать строку в int. строка является фактически номером в векторе строки, и мне нужно, чтобы он был int, поэтому я могу сравнить его с другими числами, так что вот оно:

void exibir_ranking(vector<string> &ranking) //dentro do laco, procura qual o maior score, imprime ele na tela juntamente com o nome correspondente no outro vetor depois apaga o valor e o nome dos vectors
{
    int k;
    vector <string> nomes;
    vector <int> pontuacoes;

    for(int i=0;i<ranking.max_size();i++) {
        if(i==0 || i%2 ==0) nomes.push_back(ranking[i]);
        else if(i==1 || i%2!=0) {
            int aux = atoi(ranking[i].c_str);
            pontuacoes.push_back(aux);          
        }
    }


    cout << "\n\n\t\tRANKING:\n\n";
    while(pontuacoes.size()!=0){
        int maior =0;
        for (k=0; k< pontuacoes.max_size(); k++){
            if(pontuacoes[k] > maior) maior = pontuacoes[k];
        }
        cout << k << "- " << "Nome: " << nomes[k] << "\tScore: "<<pontuacoes[k] << endl;
        nomes.erase (nomes.begin()+k);
        pontuacoes.erase (pontuacoes.begin()+k);
    }
    cout<<"\n----------------------------";

}

поэтому, визуальная студия говорит мне, что проблема здесь:

else if(i==1 || i%2!=0) {
    int aux = atoi(ranking[i].c_str);
    pontuacoes.push_back(aux);          
}

как сказано:

Ошибка 4 ошибки C3867: 'std :: basic_string <_Elem, _Traits, _Alloc> :: c_str': список вызовов отсутствующих аргументов; use '& std :: basic_string <_Elem, _Traits, _Alloc> :: c_str' для создания указателя на член c:\users\user\google drive\mackenzie\projeto programacao\projeto\projeto\jogo.cpp 247

Кто-нибудь может мне с этим помочь?

  • 0
    Почему вы используете max_size() ? Просто используйте size() .
  • 0
    int aux = atoi(ranking[i].c_str); - Я полагаю, вы хотели вызвать эту функцию-член? как c_str() ?
Теги:
atoi

2 ответа

5

Используйте () для вызова функции, c_str - это функция, а не переменная:

ranking[i].c_str()
                ^^

Кроме того, имея C++, вы можете использовать std::stoi c_str, чтобы прекратить использование c_str, он также c_str исключение, если запись недействительна для преобразования в целое число:

int aux = stoi(ranking[i]);

И замените max_size() на size() чтобы получить реальный размер вектора, а не максимально возможный размер.

1

c_str() - это функция, поэтому вы должны называть ее:

aux = atoi(ranking[i].c_str());
//                         ^^

И, как я уже сказал в комментариях, я также вижу, что вы используете max_size(). Вероятно, это вызывает множество проблем в вашей программе, так как этот метод возвращает максимальный размер, который может удерживать вектор, а не количество текущих элементов, находящихся в нем. Когда вы обращаетесь к элементу с индексом, большим, чем размер контейнера, и разыщите его, вы получите Undefined Behavior для доступа к адресу вне пределов.

Правильный способ использования - size():

for (int i = 0; i < ranking.size(); ++i)
//                  ^^^^^^^^^^^^^^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню