Problema con matrices y cadenas.

Iniciado por GustavoArango, 7 Mayo 2017, 05:31 AM

0 Miembros y 1 Visitante están viendo este tema.

GustavoArango

Empece a programar hace poco, y aunque en la universidad no hemos visto matrices, yo he estado investigando y ya se (mas o menos  :silbar:) como realizar una matriz, hice varios ejercicios, asi que decidi dar el siguiente paso, intente hacer una matriz con cadenas, y por el titulo del post pues ya se habran imaginado que paso  :xD este es el programa:

#include<stdio.h>
#include<windows.h>
#include<string>
using namespace std;

main()
{
int f1,c1,f,c,i,j,k,m;
string a;

   printf("Por favor digite la cantidad de filas que desea:");
   scanf("%d",&f);
   printf("Por favor digite la cantidad de columnas que desea:");
   scanf("%d",&c);

f1=f+1;
c1=c+1;

string matrizB[f1][c1];    
 
  for(i=1;i<=f;i++)
      {
        printf("\n\t");
       
       for(j=1;j<=c;j++)
       {          
          printf("\n\t");
          printf("posicion (%d,%d):",i,j);
  scanf("%s",&a);
          matrizB[i][j]=a;
       }
      }
      for(i=1;i<=f;i++)
      {
      printf("\tF%d\t",i);
  }
     
      for(i=1;i<=f;i++)
      {
      printf("\n");
      printf("C%d",i);
      for(j=1;j<=c;j++)
      {
      printf("\t%s\t",matrizB[i][j].c_str());
  }
  }    
}

Si, se que hay MUCHÍSIMOS errores (no me juzguen comencé hace poco  :rolleyes:), tal vez habrán muchas novatadas y cosas que sobran, pero es lo que puedo hacer hasta que tenga ya bastante experiencia en este tema. Bueno, el tema aquí es que si en vez de string cambio todo a int, es decir utilizo números, el programa funciona de maravilla:

#include<stdio.h>
#include<windows.h>

main()
{
int a,f1,c1,f,c,i,j,k,m;

   printf("Por favor digite la cantidad de filas que desea:");
   scanf("%d",&f);
   printf("Por favor digite la cantidad de columnas que desea:");
   scanf("%d",&c);

f1=f+1;
c1=c+1;

int matrizB[f1][c1];    
 
  for(i=1;i<=f;i++)
      {
        printf("\n\t");
       
       for(j=1;j<=c;j++)
       {          
          printf("\n\t");
          printf("posicion (%d,%d):",i,j);
  scanf("%d",&a);
          matrizB[i][j]=a;
       }
      }
      for(i=1;i<=f;i++)
      {
      printf("\tF%d\t",i);
  }
     
      for(i=1;i<=f;i++)
      {
      printf("\n");
      printf("C%d",i);
      for(j=1;j<=c;j++)
      {
      printf("\t%d\t",matrizB[i][j]);
  }
  }
}


Creí que simplemente cambiando los números a cadenas iba a funcionar, pero ya veo que no, alguien me podría ayudar por favor, o si lo estoy haciendo mal y hay otra forma con la que se introduce caracteres o cadenas a una matriz me podrían indicar cual es, muchas gracias  ;D ;D ;D


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

engel lex

ok... hace poco habia dicho que no se podìa programar mezclado c y c++ o era uno u otro... ya veo que no...

D: tu codigo es un desastre D:

si estás usando <string> y "using namespace" estás en c++, entonces lee y escribe por sus respectivos metodos para sus variables

primero que nada main debe ser int y retornar 0 si todo salió bien

no entiendo porque en tu array siempre empiezas desde 1 :s


simplemente te dejaré la forma en que yo lo haría en C++

Código (cpp) [Seleccionar]
#include<iostream>
#include<string>
using namespace std;

int main()
{
  int f,c,i,j;

  cout << "Por favor digite la cantidad de filas que desea:";
  cin >> f;
  cout << "Por favor digite la cantidad de columnas que desea:";
  cin >> c;

  string matrizB[f][c];

  for(i=0;i<f;i++){
    cout << endl;

    for(j=0;j<c;j++){
      cout << endl;
      cout << "\tposicion (" << (i+1) << ":" << (j+1) << "): ";
      cin >> matrizB[i][j];
    }
  }
  for(i=0;i<f;i++){
    cout << "\tF" << (i+1) << "\t";
  }

  for(i=0;i<f;i++){
    cout << endl;
    cout << "C" << (i+1);
    for(j=0;j<c;j++){
      cout << "\t" << matrizB[i][j] << "\t";
    }
  }
  cout << endl;
  return 0;
}


y aquí en C
#include<stdio.h>
#include<string.h>

int main(){
  int f,c,i,j;

  printf("Por favor digite la cantidad de filas que desea:");
  scanf("%d",&f);
  printf("Por favor digite la cantidad de columnas que desea:");
  scanf("%d",&c);

  char matrizB[f][c][20];   

  for(i=0;i<f;i++){
    printf("\n\t");

    for(j=0;j<c;j++){         
      printf("\n\t");
      printf("posicion (%d,%d):",i+1,j+1);
      scanf("%s",matrizB[i][j]);
    }
  }
  for(i=0;i<f;i++){
    printf("\tF%d\t",i+1);
  }

  for(i=0;i<f;i++){
    printf("\n");
    printf("C%d",i+1);
    for(j=0;j<c;j++){
      printf("\t%s\t",matrizB[i][j]);
    }
  } 
  printf("\n");
  return 0;
}

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

Cuidado con dimensionar arrays a partir de variables,  eso es una dependencia del compilador. El estándar dice que solo se pueden dimensionar con constantes. Para dimensionar con variables debe de forma dinámica.

GustavoArango

Vale, gracias, no tenia idea que no podía mezclar una cosa con la otra, lo he hecho todo el tiempo  :silbar: , y lo de que la matriz comience en +1 son puras paranoias mías, creí que si lo dejaba exacto no iba a funcionar porque no leería el ultimo dato o alguna cosa así :xD , ya veo que no, el problema es que no estoy familiarizado con la librería iostream, sino con la stdio, no sabia que la primera era la de c++, solo me han enseñado stdio, de nuevo muchas gracias por mostrarme el programa, me ayudo a aclararme en muchas cosas, saludos  :)

engel lex

Cita de: MAFUS en  7 Mayo 2017, 17:17 PM
Cuidado con dimensionar arrays a partir de variables,  eso es una dependencia del compilador. El estándar dice que solo se pueden dimensionar con constantes. Para dimensionar con variables debe de forma dinámica.

cierto XD pero soy sincero y me ha dado pereza siempre la redimensión en C y en C++ eso me iba a tomar como 6 lineas XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.