c++arraysstringcharchallenge-response

Issue about converting from char array to string - C++


#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;
}

This code is using the Hashing concept to store names inside of an array.

My question is:

Everytime that I try to insert a name with 8, 16 or 24 characters, while converting from char array to string, the compiler always put another 3 characters in front of them. If I try a name with 9, 17 or 25 characters, the compiler always put another 2 characters in front of them. And if I try a name with 10, 18 or 26 characters, the compiler always put another character in front of them.

Why does it happens? Is there a way to prevent it?

I need all the names to be exactly (but in lower case) as they were inserted on the input, but sorted according to the Hashing logic.

Thanks in advance!


Solution

  • The problem is here:

    char v[name.size()];
    

    As it was pointed out this is not standard C++ ...

    Regardless, you can fix it like:

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

    More or less it has the same effect as your char array, except that it does not use a char array.