关于从char数组转换为字符串的问题 - C ++

时间:2016-02-22 13:41:44

标签: c++ arrays string char challenge-response

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main () {
    string vet[10], aux;
    std::vector<char> name;
    int count=0, sum=0; 

    while (count<10) {
        getline(cin, aux);

        for (int i=0; i<aux.length(); i++)  name.push_back(aux[i]);

        for (int i=0; i<name.size(); i++) {
            name[i] = tolower(name[i]);                                 //para garantir que todos os caracteres estão em minúsculo  
            if (name[i] > 96 && name[i] < 123 && name[i] == 32)         //faixa de decimais das letras minúsculas e espaço em caso de nome composto
                sum += name[i];
        }

        char v[name.size()];                                            //vetor auxiliar criado para realizar a conversão de vetor de char para string

        for (int i=0; i<name.size(); i++)   {
            v[i] = name[i];
        }

        while (vet[sum%10] != "\0")                                     //para evitar colisão
            sum++;

        vet[sum%10] = (string) v;                                       //conversão para string e => K mod m = K % m em C++
        cout << vet[sum%10] << endl;
        count++;
        sum = 0;

        for (int i=0; i<name.size(); i++)   v[i] = '\0';

        name.clear();
    }

    cout << endl;

    for (int i=0; i<10; i++)    cout << vet[i] << endl;

    return 0;
}

此代码使用Hashing概念将名称存储在数组中。

我的问题是:

  

每次尝试插入8,16或24个字符的名称时,   从char数组转换为字符串时,编译器总是放置   在他们面前另外3个字符。如果我尝试使用9,17或者9的名字   25个字符,编译器总是在前面放另外2个字符   他们如果我尝试使用10,18或26个字符的名字,那么   编译器总是在它们前面放置另一个字符。

     

为什么会这样?有没有办法阻止它?

我需要将所有名称完全(但小写),因为它们被插入到输入中,但是根据哈希逻辑进行排序。

提前致谢!

1 个答案:

答案 0 :(得分:2)

问题在于:

char v[name.size()];

有人指出这不是标准的C ++ ......

无论如何,你可以解决它:

std::string v;    
v.resize(name.size());

它或多或少与char数组具有相同的效果,除了它不使用char数组。