在C ++中将字符串转换为int问题

时间:2013-11-09 20:57:49

标签: c++ atoi

对不起任何错误,第一次在这里提问。 所以我有这个功能,我有一个矢量类型与游戏的玩家的名字和分数,而我试图建立排名墙。 在程序的这个特定部分,我需要将字符串转换为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----------------------------";

}

所以,visual studio告诉我问题就在这里:

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

原来说:

  

错误4错误C3867:'std :: basic_string&lt; _Elem,_Traits,_Alloc&gt; :: c_str':函数调用缺少参数列表;使用'&amp; std :: basic_string&lt; _Elem,_Traits,_ Alloc&gt; :: c_str'创建指向成员的指针c:\ users \ user \ google drive \ mackenzie \ projeto programacao \ projeto \ projeto \ jogo.cpp 247

任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:5)

使用()来调用函数,c_str是函数而不是变量:

ranking[i].c_str()
                ^^

此外,使用C ++,您可以使用std::stoi来停止使用c_str,如果该条目无效转换为整数,它也会抛出异常:

int aux = stoi(ranking[i]);

并将max_size()替换为size()以获取向量的实际大小,而不是最大可能大小。

答案 1 :(得分:1)

c_str()是一个函数,所以你必须调用它:

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

就像我在文章中所说,我也看到你正在使用max_size()。这可能会导致程序中出现很多问题,因为此方法返回向量可以容纳的最大大小,而不是当前驻留在其中的元素数量。当您访问索引大于容器大小的元素并取消引用它时,您将获得用于访问越界地址的未定义行为。

使用的正确方法是size()

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