0
#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 个字符的名称,编译器总是在它们前面放置另一个字符。

为什么会发生?有没有办法防止它?

我需要将所有名称准确(但小写),因为它们被插入到输入中,但根据散列逻辑进行排序。

提前致谢!

4

1 回答 1

2

问题在这里:

char v[name.size()];

正如有人指出的那样,这不是标准的 C++ ...

无论如何,您可以像这样修复它:

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

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

于 2016-02-22T13:51:50.050 回答