Проблема с преобразованием массива char в строку

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

Этот код использует концепцию хеширования для хранения имен внутри массива.

Мой вопрос:

Каждый раз, когда я пытаюсь вставить имя из 8, 16 или 24 символов,
при преобразовании массива char в строку компилятор всегда
еще 3 персонажа перед ними. Если я попробую имя с 9, 17 или
25 символов, компилятор всегда помещает еще 2 символа перед
из них. И если я попробую имя из 10, 18 или 26 символов,
Компилятор всегда ставит перед ними другой символ.

Почему это происходит? Есть ли способ предотвратить это?

Мне нужно, чтобы все имена были точно (но в нижнем регистре), как они были вставлены на вход, но отсортированы в соответствии с логикой хеширования

Заранее спасибо!

0

Решение

Проблема здесь:

char v[name.size()];

Как было указано, это не стандартный C ++ …

В любом случае, вы можете исправить это так:

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

Более или менее он имеет тот же эффект, что и ваш массив символов, за исключением того, что он не использует массив символов.

2

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

Других решений пока нет …