2016-08-12 3 views
1

Я создаю программу регистрации телефона, чтобы проверить, действительно ли введен номер телефона. Я пробовал много раз искать google и выяснил, как проверить длину телефонных номеров и начинается ли она с «04»; кажется, что нет ничего, чтобы проверить, может ли строка быть преобразована в целое без знака без ошибки. Мой текущий код:Как преобразовать строку в int в C++?

bool Is_Valid(string phone) { 
if (phone.length() == 10 && phone.substr(0,2) == "04") { 
    return 1; 
} else { 
return 0; 
} 
} 

Желаемый результат был бы, что если ввести в строку, длиной десять символов и пользователь начинает с «04», но строка имеет букву в нем, функция будет возвращать ложь , Аналогично, если символ введен в строку длиной десять символов, и она начиналась с «04», а также без букв, она вернула бы истину. Спасибо.

+0

Вам нужно пойти и получить хорошую книгу на C++. –

+0

У меня есть книга C++ для чайников, это хорошо или плохо? –

+0

Как насчет strtol? Если endptr не указывает на конец строки после этого, то не вся строка будет числом. Вам также нужно проверить, что возвращаемое целое число не является отрицательным, потому что это означает, что на лицевой стороне был знак минуса. –

ответ

1

Вы можете столкнуться с трудностями при преобразовании таких строк в Интс, потому что те имеют ведущие нули, которые будут пропущены при преобразовании.

Я предлагаю std::all_of и ::isdigit из стандартной библиотеки;

if (phone.length() == 10 && phone.substr(0, 2) == "04" 
    && std::all_of(phone.begin(), phone.end(), ::isdigit)) // added 

Это будет работать. Не забудьте указать <algorithm> и <cctype>.

Обратите внимание, что для этого требуется C++ 11 (или новее), который активируется -std=c++11, если вы используете gcc. Если C++ 11 недоступен, в этом ответе https://stackoverflow.com/a/8889045/5118228 объясняется, как свернуть собственную функцию тестера.

0

Вы можете использовать std::ostringstream, такие как:

std::string example = "10"; 
unsigned int value; 
std::istringstream text_stream(example); 
text_stream >> value; 

Вы можете захотеть использовать модификатор dec обрабатывать любые предшествующие нули:
text_stream >> dec >> value;

Я не пробовал, хотя. Проблема основана на числовых константах C++, которые начинаются с 0, рассматриваются как восьмеричные (база 8).

Edit 1: Пример программы

#include <string> 
#include <sstream> 
#include <iostream> 

int main(void) 
{ 
    std::string example = "010"; 
    unsigned int value; 
    std::istringstream text_stream(example); 
    text_stream >> value; 
    if (value == 10) 
    { 
     std::cout << "Coversion correct\n"; 
    } 
    else 
    { 
     std::cout << "Invalid conversion.\n"; 
    } 

    return 0; 
} 
+0

ошибка: –

+0

ошибка: переменная 'std :: ostringstream text_stream' имеет инициализатор, но неполный тип –

+0

ошибка: запрос для члена 'length' в 'Phone', который относится к классу non-class unsigned int –