Tengo una cadena que contiene lo que cada vez que el usuario tiene de entrada

string userstr = "";
cout << "Please enter a string ";
getline (cin, userstr);

La cadena se almacena en userstr, luego quiero que la cadena se almacena en una matriz de enteros donde cada carácter es un elemento diferente en la matriz. He creado una matriz dinámica como la siguiente:

int* myarray = new int[sizeof(userstr)]; 

Sin embargo, ¿cómo entonces empiezo mi cadena en la matriz?

  • -1 ¿a qué te refieres.
  • sizeof(userstr) no es lo mismo que userstr.length() o userstr.size().
  • posibles duplicados de C++ Longitud de la Cadena?
InformationsquelleAutor user3080755 | 2013-12-08

4 Comentarios

  1. 2

    Puede acceder a cada elemento de la cadena de usar el operador [],, que devuelve una referencia a un char. Usted puede deducir el valor int para char ‘0’ y obtendrá la correcta int representación.

    for(int i=0;i<userstr.length();i++){
        myarray[i] = userstr[i] - '0';
    }
    • cuando hago esto y mostrar myarray acabo de llegar de números aleatorios: por ejemplo, si escribo «hola mi nombre es» el que poner es 006B4D30
    • Estoy suponiendo que lo que se ingresa se ‘supone’ para ser un int. Si desea almacenar una cadena en un array de enteros, a continuación, lo que se hace es almacenar el número entero que representa cada char – ¿es esto lo que estás tratando de hacer? Estoy claro en cuanto a la finalidad, si es el caso
    • lo siento, sí, eso es lo que estoy tratando de hacer, ha sido un día muy largo o.O
    • En ese caso puede quitar el » – ‘0’ » a partir del código. Luego, cuando el deseo de volver a convertir una cadena, usted tiene que convertir cada número entero de nuevo a un char. Por ejemplo, si desea que la salida del primer carácter de la cadena se almacena como un int que usted acaba de decir cout << (char) userstr[0];
    • ahh ya veo, Gracias
  2. 3
    int* myarray = new int[ userstr.size() ];
    
    std::copy( usestr.begin(), userstr.end(), myarray ); 

    La terminación de cero no se añade a la matriz. Si usted lo necesita, usted debe asignar la matriz de haber más de un elemento y el lugar de la terminación de cero a ti mismo.

    • cuando hago esto me sale este error: Windows ha desencadenado un punto de interrupción en cw2.exe. Esto puede ser debido a una corrupción de la pila, lo que indica un error en cw2.exe o cualquiera de los archivos Dll que ha cargado. Esto también puede ser debido a que el usuario presione F12 mientras cw2.exe tiene el foco. La ventana de salida se puede tener más información de diagnóstico.
    • +1. Naturalmente, también se podría declarar myarray en una forma que automáticamente se libre de su memoria cuando se sale del ámbito. I. e int myarray[ userstr.size() ];
    • pero userstr no es una constante, me da un error diciendo que la expresión debe tener un valor constante
    • Oh, me parece haber entendido la razón del error. Usted debe asignar la matriz de forma dinámica. Parece que usted está tratando de declarar en la pila o de forma estática.
    • oh, yo pensaba que esto : –> int* myarray = new int[ userstr.size() ]; asigna la matriz de forma dinámica?
  3. 0

    Usted puede simplemente utilizar isstringstream para convertir el string a int como sigue

    istringstream istringName(intString);
    istringName >> real_int_val;

    ahora por arte de magia se ha convertido en un int que contiene todos los números de la cadena
    Sin embargo, no veo por qué no cin como un int en el primer lugar???

  4. -1

    Aquí es una manera de hacerlo

    for(int i=0;i<userstr.length();i++){
        myarray[i] = userstr[i];
    }

Dejar respuesta

Please enter your comment!
Please enter your name here