Estoy aprendiendo c++, y estoy teniendo problemas haciendo algunos novato cosas. Estoy tratando de crear una pequeña aplicación que toma los datos de entrada del usuario y lo almacena en una matriz de char. Yo, a continuación, analizar a través de la matriz y eliminar todos los paréntesis y dases y mostrarlo. como el siguiente

(325)858-7455
a

3258587455

Pero estoy recibiendo errores

 error C2440: '=' : cannot convert from 'const char [2]' to 'char'

A continuación es mi código simple que puede ser fácilmente tirado en un compilador y corrió.

#include "stdafx.h"
#include<iostream>
#include<conio.h>

using namespace std;

/*
This is a template Project
*/
int main()
{
    char phoneNum[25];

    for(int i = 0; i < (sizeof(phoneNum) / sizeof(char)); i++)
    {
        phoneNum[i] = "i";
    }


    cout<< "Enter a phone Number" <<endl;
    cin>>phoneNum;

    if(phoneNum[0] != '(' || phoneNum[4] != ')' || phoneNum[8] != '-')
    {
        cout<<"error";
    }
    else
    {

        for(int i = 0; i < (sizeof(phoneNum) / sizeof(char));i++)
        {
            if(phoneNum[i] != '(' || phoneNum[i] != ')' || phoneNum[i] != '-')
            {
                cout<<phoneNum[i];
            }
        }
    }

    cin>>phoneNum;
    getchar();


    return 0;
}

No está completamente terminada, así que si alguien tiene consejos sobre la mejor manera de quitar las cadenas de caracteres de una cadena. eso sería genial.

Si esta es la tarea por favor marque como tal.
¿Realmente quieres leer la letra ‘i’ en la matriz?
dases → guiones?
Al corregir la sintaxis de un carácter único del «yo» al «yo», es que todavía no me queda claro, ¿por qué usted necesita el bucle. Usted tendrá una matriz con la letra ‘i’ 25 veces. Esto parece no tener sentido. Tenga en cuenta que usted no cuente con la debida cadena de ninguno de los dos, debido a que su matriz no será terminada en ‘\0’.
Usted debe cambiar su algoritmo acaba de sacar a todos los personajes que son dígitos numéricos. Entonces no importa si entro 123456789, (12)345-6789, 12-34-56-789…

OriginalEl autor numerical25 | 2010-05-13

5 Comentarios

  1. 17

    El problema es que aquí, creo yo:

    phoneNum[i] = "i";

    Desea asignar un único carácter, por lo que necesita usar comillas simples para su literal:

    phoneNum[i] = 'i';

    Bien pueden haber otros problemas – sólo he tratado de corregir el mencionado en el título 🙂

    OriginalEl autor Jon Skeet

  2. 6

    Lo importante aquí es entender la diferencia entre "i" y 'i'.

    "i" es una cadena, y las cadenas se almacenan en la memoria como una secuencia de char valores, anexando al final de la cadena un carácter nulo (cero). Así que cuando usted escribe "hello" almacenar 'h' 'e' 'l' 'l' 'o' '(null)'. De la misma manera, cuando usted escribe "i", usted está almacenando 'i' '(null)', y esa es la 'const char [2]' (una matriz de 2 elementos char).

    Cuando usted toma una ‘matriz de char’ y usar el operador [], se hace referencia a un 'char' elemento de la matriz. Así que cuando usted escribe phoneNum[i] que usted está recibiendo un 'char'.

    Es por eso que usted necesita para escribir phoneNum[i] = 'i';

    OriginalEl autor Diego Pereyra

  3. 4

    Me sugieren el uso de las cadenas C++ y arroyos:

    #include <string>
    #include <iostream>
    #include <cstdlib>
    
    using std::string;
    using std::cout;
    using std::endl;
    using std::cerr;
    using std::cin;
    using std::flush;
    
    int main(void)
    {
        string phone_number;
        cout << "Enter phone number: " << flush;
        getline(cin, phone_number);
    
        //Check first for valid characters
        const string valid_characters = "0123456789()- ";
        string::size_type position = phone_number.find_first_not_of(valid_characters);
        if (position != string::npos)
        {
            cerr << "Invalid phone number.\n";
            return EXIT_FAILURE;
        }
    
        //Remove non-numeric characters
        const string chars_to_remove = " ()-";
        position = 0;
        while ((position = phone_number.find_first_of(chars_to_remove, position))
               != string::npos)
        {
            phone_number.erase(position, 1);
        }
    
        cout << "\nPhone number only digits: " << phone_number << endl;
        return EXIT_SUCCESS;
    }

    La std::string tiene muchos métodos útiles para la manipulación de los métodos.

    Los consejos de muchos desarrolladores experimentados en Desbordamiento de Pila es para los novatos para aprender el uso de las cadenas C++ ( std::string ) antes de usar C-strings de estilo (char *).

    Esto es infinitamente más respuesta correcta. La OP del error de compilación fue, por mucho, el peor problema en su código, tales como la saturación de búfer que espera para suceder en phonenum[25].
    im ni idea de lo que un desbordamiento de búfer. y ese código no compila. No está seguro de si un montón de es de pseudo o no. No sabría causa que no soy fluido en c++
    Esto no es pseudo-código. Hay sólo un par de erratas en la primera parte. Reemplazar «using std::arroyo» con «using std::string» y agregar «using std::cin».

    OriginalEl autor Thomas Matthews

  4. 2
    phoneNum[i] = "i";

    La cosa de la izquierda es un char; la cosa en el derecho es una cadena, una matriz de char. Desea 'i' a la derecha.

    Tan abajo a la interna … no es «yo» un 2char constante de cadena (uno para la longitud, uno para las letras reales) y por lo que se registra como un 2char constante de cadena? (estar en el origen obviamente no es una dinámica de la cadena en este caso). También, ¿cuál sería el compilador emite si la elección en su lugar «» (yo soy demasiado perezoso para conseguir un compilador de C++… )
    "i" será una matriz de dos caracteres, uno para el i y uno para el terminador nulo. Del mismo modo para "" sería una matriz de sólo uno, el terminador nulo. En ambos casos, el compilador se queja porque el tipos son incompatibles, no es válido para asignar un array (incluso uno con uno de los miembros) para una matriz no.
    Gracias por aclarar. Se me olvidó la palabra array en mi pensamiento … 😉

    OriginalEl autor AakashM

  5. 0

    ¿Por qué necesita esta comprobación? Lo que si querían introducir un número de teléfono con el que ofrece [es decir, con paréntesis y guiones, pero no limitado a (3)3-4]

    if(phoneNum[0] != '(' || phoneNum[4] != ')' || phoneNum[8] != '-')
    {
        cout<<"error";
    }
    else

    Me gustaría quitar ese bloque.

    Este es un buen punto, pero realmente no responder a la pregunta actual.
    Lo sé, sólo el hecho de que yo no puedo poner el código en un comentario.

    OriginalEl autor jcolebrand

Dejar respuesta

Please enter your comment!
Please enter your name here