Como ler várias Strings para um vetor bidimensional em C++[Resolvido]

Boa tarde gente. Não sei como inserir várias strings ( texto completo ) num vetor bidimensional. Eu escrevi o seguinte código:

char nome[nAlun][40];

for(i = 0; i < nAlun; i++)
   {
     cout << "Digite o nome do " << i + 1 << char(167) << " aluno: "; 
     getline(cin, nome[i]);
   }

Eu ainda pensei no seguinte artifício:


int z = 0;
char temp; // variável char temporária
while((temp = cin.get()) != '\n')
        nome[i][z++] = temp;
        
nome[i][z] = '\0';

Porém não funcionou.

Me parece que o getline não aceita aquela notação. Eu sei que getline(cin, nome); funcionaria mas o problema é que eu tenho que obter mais de um nome. Com isso, gostaria de saber qual é a sintaxe para que eu possa obter nomes completos de alunos com getline. Obrigado pelo esclarecimento.

Você pode usar std::string e std::vector ? Eu recomendaria usar isso, em vez de usar vetores bidimensionais de caracteres, que são um pouco difíceis de lidar, e desperdiçam muito espaço.

Obrigado pela atenção thingol. O problema é que não conheço a manipulação de C++ através de std’s. Seria realmente difícil driblar o buffer :slight_smile: com o uso de um vetor bidimensional de caracteres ? :frowning:

Bom, vou mostrar como se faz com “string” e “vector”. Se você sabe mais Java que C++, vai ver que muitas coisas são mais parecidas com Java que com o C++ que você aprendeu na escola. Por exemplo, o “std::string” lembra um pouco o java.lang.String ou o java.lang.StringBuilder, e o “std::vector” lembra um pouco o java.util.ArrayList.

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

using namespace std;
int main (int argc, char* argv[]) {
    vector<string> alunos;
    cout << "Digite um nome de aluno por linha, e deixe uma linha em branco para terminar." << 

endl;
    string linha;
    int numeroAluno = 1;
    do {
        cout << "Aluno " << numeroAluno << ": ";
        numeroAluno++;
        getline(cin, linha);
        if (linha != "") 
            alunos.push_back (linha);
    } while (linha != "");
    cout << "Foram digitados os nomes de " << alunos.size() << " alunos." << endl;
    for (int i = 0; i < alunos.size(); ++i) {
        cout << "Aluno " << (i+1) << ": " << alunos[i] << endl;
    }
    cout << "Fim." << endl;
}

Exemplo de saída:

C> alunos
Digite um nome de aluno por linha, e deixe uma linha em branco para terminar.
Aluno 1: Jose Ribamar
Aluno 2: Joaquim Manuel
Aluno 3: Bruno Henrique
Aluno 4: Carlos Eduardo
Aluno 5:
Foram digitados os nomes de 4 alunos.
Aluno 1: Jose Ribamar
Aluno 2: Joaquim Manuel
Aluno 3: Bruno Henrique
Aluno 4: Carlos Eduardo
Fim.

Hum é mesmo bastante parecido com o Java. Mas o que é aquele método push_back ? funciona como o método add do ArrayList ?

Sim senhor, é igualzinho.

Muito obrigado por toda a atenção. Só mais uma pergunta: qual é o nome desse tipo especial de Array em C++ parecido com ArrayList ?

Olhe na linha 7 do programa.

ah ta :smiley:

Na verdade, é mais fácil aprender a usar o vector e o string do que aprender a como manipular os arrays de chars. É claro que cedo ou tarde você vai precisar aprender a mexer com os arrays também (e ponteiros, e memória e toda aquela coisa tenebrosa)… mas, já que você usa C++, não custa começar pelo mais fácil. :slight_smile: