Я изучаю 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;
}
Это не полностью закончено поэтому, если у кого-либо есть какие-либо указатели на лучшем способе удалить строковые символы из строки. это было бы большим.
Я считаю, что проблема здесь:
phoneNum[i] = "i";
Вы хотите назначить один символ , поэтому вам нужно использовать одинарные кавычки для вашего литерала:
phoneNum[i] = 'i';
Вполне могут быть и другие проблемы - я попытался исправить только ту, которая упомянута в заголовке :)
phoneNum[i] = "i";
Слева - char
; справа - строка, массив из char
. Вы хотите "i"
справа.
Зачем вам этот чек? Что, если бы они захотели ввести номер телефона за пределами США в формате, подобном предложенному вами [имеется в виду с скобками и дефисами, но не ограничиваясь (3) 3-4]
if(phoneNum[0] != '(' || phoneNum[4] != ')' || phoneNum[8] != '-')
{
cout<<"error";
}
else
, я бы удалил этот блок.
Я предлагаю использовать строки и потоки 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 *
).
Здесь важно понять разницу между «i»
и «i»
.
«i»
- это строка, и строки хранятся в памяти как последовательность значений char, добавляя в конец строки нулевой символ (скажем, ноль). Итак, когда вы пишете "привет"
, вы сохраняете 'h' 'e' 'l' 'l' 'o' '(null)'
. Таким же образом, когда вы пишете "i"
, вы сохраняете 'i' '(null)'
, и это 'const char [2]'
(массив из 2-х символьных элементов).
Когда вы берете массив символов и используете оператор [], вы имеете в виду элемент char
в этом массиве. Поэтому, когда вы пишете phoneNum [i]
, вы получаете 'char'
.
Вот почему вам нужно написать phoneNum [i] = 'i';