atoi — преобразование строки в задачи int в переполнении стека

Извините за любые ошибки, впервые задавая вопросы здесь.
так что у меня есть эта функция, где у меня есть векторный тип с именами и оценками игроков в игре, в то время как я пытаюсь сделать рейтинговую стену.
в этой конкретной части программы мне нужно преобразовать строку в 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 ‘: список отсутствующих аргументов при вызове функции; использовать&станд :: basic_string<_Elem, _Traits, _Alloc> :: c_str ‘для создания указателя на член c: \ users \ user \ google drive \ mackenzie \ projeto programacao \ projeto \ projeto \ jogo.cpp 247

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

0

Решение

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

ranking[i].c_str()
^^

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

int aux = stoi(ranking[i]);

 

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

5

Другие решения

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

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

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

Правильный метод для использования size():

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector