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

km0tfn4u  于 2023-02-06  发布在  其他
关注(0)|答案(5)|浏览(322)

我正在学习c++,我在做一些新手的事情时遇到了一些问题。我正在尝试创建一个非常小的应用程序,它接受用户的输入并将其存储到一个字符数组中。然后我解析该数组,删除所有括号和dase并显示它。如下所示
电话:(325)858-7455,电话:
3258587455
但我收到错误

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

下面是我的简单代码,可以很容易地扔在编译器和运行。

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

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

mf98qq94

mf98qq941#

我认为,问题就在这里:

phoneNum[i] = "i";

您希望分配一个 * 字符 *,因此需要对文本使用单引号:

phoneNum[i] = 'i';

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

disho6za

disho6za2#

这里重要的是理解"i"'i'之间的区别。
"i"是一个字符串,字符串以字符值序列的形式存储在内存中,在字符串的末尾附加一个空字符(比如零),所以当你写"hello"时,你存储的是'h' 'e' 'l' 'l' 'o' '(null)',同样,当你写"i"时,你存储的是'i' '(null)',这就是'const char [2]'(一个2个字符元素的数组)。
当你接受一个'char array'并使用[]操作符时,你引用的是数组中的一个'char'元素,所以当你写phoneNum[i]时,你得到的是一个'char'
这就是为什么需要编写phoneNum[i] = 'i';

2mbi3lxu

2mbi3lxu3#

我建议使用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)。

kx5bkwkv

kx5bkwkv4#

phoneNum[i] = "i";

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

jgwigjjp

jgwigjjp5#

为什么您需要此检查?如果他们想输入非美国电话号码,格式类似于您提供的[意思是带有括号和破折号,但不限于(3)3-4]

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

我会把那块移开。

相关问题