ошибка C2440: '=': не может преобразовать из 'символа константы [2]' для 'обугливаний'

Я изучаю C++, и у меня есть проблемы, делающие некоторые вещи новичка. Я пытаюсь создать очень небольшое приложение, которое берет пользовательский вход и хранит его в массив символов. Я затем анализирую через тот массив и удаляю всю круглую скобку и десять кубометров и отображаю его. как следующее

(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
задан Deanie 29 May 2016 в 20:58
поделиться

5 ответов

Я считаю, что проблема здесь:

phoneNum[i] = "i";

Вы хотите назначить один символ , поэтому вам нужно использовать одинарные кавычки для вашего литерала:

phoneNum[i] = 'i';

Вполне могут быть и другие проблемы - я попытался исправить только ту, которая упомянута в заголовке :)

17
ответ дан 18 December 2019 в 05:48
поделиться
phoneNum[i] = "i";

Слева - char ; справа - строка, массив из char . Вы хотите "i" справа.

2
ответ дан 18 December 2019 в 05:48
поделиться

Зачем вам этот чек? Что, если бы они захотели ввести номер телефона за пределами США в формате, подобном предложенному вами [имеется в виду с скобками и дефисами, но не ограничиваясь (3) 3-4]

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

, я бы удалил этот блок.

0
ответ дан 18 December 2019 в 05:48
поделиться

Я предлагаю использовать строки и потоки 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 * ).

4
ответ дан 18 December 2019 в 05:48
поделиться

Здесь важно понять разницу между «i» и «i» .

«i» - это строка, и строки хранятся в памяти как последовательность значений char, добавляя в конец строки нулевой символ (скажем, ноль). Итак, когда вы пишете "привет" , вы сохраняете 'h' 'e' 'l' 'l' 'o' '(null)' . Таким же образом, когда вы пишете "i" , вы сохраняете 'i' '(null)' , и это 'const char [2]' (массив из 2-х символьных элементов).

Когда вы берете массив символов и используете оператор [], вы имеете в виду элемент char в этом массиве. Поэтому, когда вы пишете phoneNum [i] , вы получаете 'char' .

Вот почему вам нужно написать phoneNum [i] = 'i';

6
ответ дан 18 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: