错误C2440:'=':无法从'const char [2]'转换为'char'

时间:2010-05-13 14:44:01

标签: c++ visual-studio-2008

我正在学习c ++,而且我在做一些新手的事情时遇到了问题。我正在尝试创建一个非常小的应用程序,它接受用户输入并将其存储到char数组中。然后我解析该数组并删除所有括号和数据并显示它。如下

(325)858-7455 到
3258587455

但我收到错误

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

下面是我的简单代码,可以很容易地在编译器中抛出并运行。

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

它没有完全完成,所以如果有人有关于从字符串中删除字符串字符的最佳方法的任何指针。那太好了。

5 个答案:

答案 0 :(得分:17)

问题出在这里,我相信:

phoneNum[i] = "i";

您想分配一个字符,因此您需要为文字使用单引号:

phoneNum[i] = 'i';

可能还有其他问题 - 我只是试图解决标题中提到的问题:)

答案 1 :(得分:6)

这里重要的是要了解"i"'i'之间的区别。

"i"是一个字符串,字符串作为char值序列存储在内存中,在字符串的末尾附加一个空字符(假设为零)。因此,当您编写"hello"时,您正在存储'h' 'e' 'l' 'l' 'o' '(null)'。以同样的方式,当您编写"i"时,您正在存储'i' '(null)',那就是'const char [2]'(包含2个char元素的数组)。

当您使用'char数组'并使用[]运算符时,您指的是该数组中的'char'元素。因此,当您撰写phoneNum[i]时,您将获得'char'

这就是你需要写phoneNum[i] = 'i';

的原因

答案 2 :(得分:4)

我建议使用C ++字符串和流:

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

std::string有许多用于操作方法的有用方法。

许多有经验的开发人员对 Stack Overflow 的建议是让新手在使用C风格的字符串(std::string)之前学习使用C ++字符串(char *)。

答案 3 :(得分:2)

phoneNum[i] = "i";

左边的东西是char;右边的东西是一个字符串,一个char的数组。你想要在右边'i'

答案 4 :(得分:0)

为什么需要这张支票?如果他们想要输入格式与您提供的非美国电话号码有什么关系[意思是parens和破折号,但不限于(3)3-4]

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

我会删除该块。