繁体   English   中英

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

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

我正在学习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;
}

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

问题出在这里,我相信:

phoneNum[i] = "i";

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

phoneNum[i] = 'i';

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

这里重要的是要理解"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';

我建议使用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风格的字符串( char * )之前学习使用C ++字符串( std::string )。

phoneNum[i] = "i";

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

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

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

我会删除那个块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM