error C2440: '=' : cannot convert from 

2020-07-14 06:20发布

问题:

I am learning c++, and I am having issues doing some newbie things. I am trying to create a very small application that takes the users input and stores it into a char array. I then parse through that array and remove all parenthesis and dases and display it. like the following

(325)858-7455 to
3258587455

But I am getting errors

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

Below is my simple code that can easily be thrown in a compiler and ran.

#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;
}

It is not completely finished so if anyone has any pointers on the best way to remove strings characters from a string. that would be great.

回答1:

The problem is here, I believe:

phoneNum[i] = "i";

You want to assign a single character, so you need to use single quotes for your literal:

phoneNum[i] = 'i';

There may well be other problems - I've only tried to fix the one mentioned in the title :)



回答2:

The important thing here is to understand the difference between "i" and 'i'.

"i" is a string, and strings are stored in memory as a sequence of char values, appending at the end of the string a null character (let's say zero). So when you write "hello" you are storing 'h' 'e' 'l' 'l' 'o' '(null)'. In the same way, when you write "i", you are storing 'i' '(null)', and thats the 'const char [2]' (an array of 2 char elements).

When you take a 'char array' and use the [] operator, you are referring to a 'char' element in that array. So when you write phoneNum[i] you are getting a 'char'.

That's why you need to write phoneNum[i] = 'i';



回答3:

I suggest using C++ strings and streams:

#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;
}

The std::string has many useful methods for manipulating methods.

The advice from many experienced developers on Stack Overflow is for newbies to learn using C++ strings (std::string) before using C-style strings (char *).



回答4:

phoneNum[i] = "i";

The thing on the left is a char; the thing on the right is a string, an array of char. You want 'i' on the right.



回答5:

Why do you need this check? What if they wanted to enter a non-US phone number formatted like you offered [meaning with parens and dashes, but not limited to (3)3-4]

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

I would remove that block.