0
#include<conio.h>
#include <iostream>
using namespace std;


char *ptrmatrix; 
int n;

void datos(void){
    int op=0,cont=0, ciclo=0,contEle=0, num=0;bool sal=false;

    while(op!=3){
        char categ[20];//no pueden haber palabras tan extensas
        cout<<"Digite categoria: ";cin>>categ;

        for(int i=0; categ[i] != '\0';i++){
             //cout<<categ[i]<<endl;
            cont++;
        }num++;


        ptrmatrix= new char[cont];//1 el tamañoo aumenta en cada iteracion
      
              //entra cada elemento de la categoria
              for(int j=ciclo;j<cont;j++){
                  ptrmatrix[j]=categ[contEle];
                  contEle++;

              }contEle=0;sal=true;
        cout<<"Digite 3 para salir";
        cin>>op;
        cout<<endl;
        ciclo+=cont;
            cont=0;
    }
}
void mostrar(void){

    cout<<"\nImprimiendo elementos: ";
    for (int i=0;i<n;i++){
         cout<<" "<<ptrmatrix[i]<<endl;
    }
}

int main()
{
    
    datos();
    //mostrar()
    return 0;
}

Lo que intento en este código es agregar mas posiciones del arreglo dinámicamente en tiempo de ejecución, ya que el usuario , va a ingresar palabras nuevas en cada iteración, hasta que el desee y este no me va a definir antes el tamaño de mi arreglo, ni debe tenerlo en el código.

en este caso sé que si defino el puntero en cada iteración es como si me borrara todo pero ese no es el objetivo, debido a que si el usuario desea ingresar una palabra que ya está en el arreglo, la aplicación no se lo debe permitir. Gracias

1
  • Si te es permitido en tu tarea/proyecto, podrías utilizar vectores, yo creo que simplificaría tu código. Commented el 27 jul. 2022 a las 6:49

1 respuesta 1

1

Usa los contenedores de la librería estándar:

  • std::string para cadenas de texto de tamaño arbitrario.
  • std::vector o std::list para guardar cadenas.

Tan sencillo y directo como esto:

std::list<std::string> cadenas;

std::cout "Digite categoria:\n";
std::string cadena;
std::getline(std::cin, cadena);

cadenas.push_back(cadena);

Puedes repetir la lectura de categoría y su guardado en la lista tantas veces como quepa en la memoria de tu sistema. Podrás mostrar todas las categorías recorriendo la lista:

std::cout << "Has introducido estas cadenas:\n";
for (const auto &cadena : cadenas)
    std::cout << cadena << '\n';

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.