Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2013, 14:15   #1
sancho1996
Новичок
Джуниор
 
Регистрация: 18.07.2013
Сообщений: 2
Вопрос Работа со строками и массивами

Пользователь вводит телефон и электронную почту. Программа проверяет корректность ввода данных.

Пользователь вводит тел. и эл. почту я сделал, как реализовать проверку?

Код:
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
    char number[8],email[30];
    
    
    cout<<"Enter your number: ";
    cin.getline(number,8);
    cout<<"Enter your E-mail: ";
    cin.getline(email,30);
    
    getch();
}
sancho1996 вне форума Ответить с цитированием
Старый 18.07.2013, 14:22   #2
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
bool CompareMask(const char* str, const char* mask)
{
  int len = strlen(mask);
  for (int i = 0; i < len; i++)
  {
	if(mask[i] != '_')
	{
	  if(mask[i] != str[i])
	  {
		return false;
	  }
	}else if(str[i] == '-' || str[i] == '(' || str[i] == ')' || str[i] == '+')
			return false;
  }
  return true;
}

bool checkIllegal(const char* str)
{
  for(int i = 0;i<strlen(str);i++)
  {
	if (str[i] != '0' && str[i] != '1' && str[i] != '2' && str[i] != '3' && str[i] != '4' &&str[i]!='-'&&
		str[i] != '5' && str[i] != '6' && str[i] != '7' && str[i] != '8' && str[i] != '9'&&str[i]!='+'&&str[i]!='('&&str[i]!=')')
	{
	   return false;
	}
  }
  return true;
}

bool CheckPhone(const char* phStr)
{
  switch (strlen(phStr))
  {
	#define CHMASK(masks)                       \
	if(!checkIllegal(phStr))                    \
		return false;                           \
	if(masks)                                   \
	  return false;                             \
	return true;

	case 16:
	 CHMASK(!CompareMask(phStr,"+7(___)___-__-__"))
	case 15:
	 CHMASK(!CompareMask(phStr,"+7(___)___-____")&&!CompareMask(phStr,"8(___)___-__-__"))
	case 14:
	 CHMASK(!CompareMask(phStr,"+7(___)_______")&&!CompareMask(phStr,"+7______-__-__")&&!CompareMask(phStr,"8(___)___-____"))
	case 13:
	 CHMASK(!CompareMask(phStr,"+7______-____")&&!CompareMask(phStr,"8(___)_______")&&!CompareMask(phStr,"8______-__-__"))
	case 12:
	 CHMASK(!CompareMask(phStr,"+7__________")&&!CompareMask(phStr,"8______-____"))
	case 11:
	 CHMASK(!CompareMask(phStr, "8__________"))
	default:
		return false;
  }
  #undef CHMASK()
  return true;
}

int main()
{
  char ph[11] = "81231231231";
  bool rv = CheckPhone(ph);
  return 0;
}
Помог? Оставляем отзыв =)

Последний раз редактировалось Helloween; 18.07.2013 в 14:25.
Helloween вне форума Ответить с цитированием
Старый 18.07.2013, 14:27   #3
sancho1996
Новичок
Джуниор
 
Регистрация: 18.07.2013
Сообщений: 2
По умолчанию ????

Цитата:
Сообщение от Helloween Посмотреть сообщение
Код:
bool CompareMask(const char* str, const char* mask)
{
  int len = strlen(mask);
  for (int i = 0; i < len; i++)
  {
	if(mask[i] != '_')
	{
	  if(mask[i] != str[i])
	  {
		return false;
	  }
	}else if(str[i] == '-' || str[i] == '(' || str[i] == ')' || str[i] == '+')
			return false;
  }
  return true;
}

bool checkIllegal(const char* str)
{
  for(int i = 0;i<strlen(str);i++)
  {
	if (str[i] != '0' && str[i] != '1' && str[i] != '2' && str[i] != '3' && str[i] != '4' &&str[i]!='-'&&
		str[i] != '5' && str[i] != '6' && str[i] != '7' && str[i] != '8' && str[i] != '9'&&str[i]!='+'&&str[i]!='('&&str[i]!=')')
	{
	   return false;
	}
  }
  return true;
}

bool CheckPhone(const char* phStr)
{
  switch (strlen(phStr))
  {
	#define CHMASK(masks)                       \
	if(!checkIllegal(phStr))                    \
		return false;                           \
	if(masks)                                   \
	  return false;                             \
	return true;

	case 16:
	 CHMASK(!CompareMask(phStr,"+7(___)___-__-__"))
	case 15:
	 CHMASK(!CompareMask(phStr,"+7(___)___-____")&&!CompareMask(phStr,"8(___)___-__-__"))
	case 14:
	 CHMASK(!CompareMask(phStr,"+7(___)_______")&&!CompareMask(phStr,"+7______-__-__")&&!CompareMask(phStr,"8(___)___-____"))
	case 13:
	 CHMASK(!CompareMask(phStr,"+7______-____")&&!CompareMask(phStr,"8(___)_______")&&!CompareMask(phStr,"8______-__-__"))
	case 12:
	 CHMASK(!CompareMask(phStr,"+7__________")&&!CompareMask(phStr,"8______-____"))
	case 11:
	 CHMASK(!CompareMask(phStr, "8__________"))
	default:
		return false;
  }
  #undef CHMASK()
  return true;
}

int main()
{
  char ph[11] = "81231231231";
  bool rv = CheckPhone(ph);
  return 0;
}
есть что нить попроще?
sancho1996 вне форума Ответить с цитированием
Старый 18.07.2013, 14:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А чем это сложно?
Ты проверь - работает?
Или тут принцип преподавателя?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2013, 14:41   #5
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Можно в принципе так.

Код:
#include "stdlib.h"

bool CheckPhone(const char* phStr)
{
  long seed = time(NULL);
  srand(seed);
  return rand()%2;
}

int main()
{
  char ph[11] = "81231231231";
  bool rv = CheckPhone(ph);
  return 0;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 18.07.2013, 16:01   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Любимая тема - массивы и строки. Только не совсем понимаю Helloween , что происходит в Вашем последнем коде?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 18.07.2013, 18:42   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Bugrimov
В его коде недетерминированный алгоритм проверки корректности телефонного номера (и не только, алгоритм проверяет что угодно - он универсальный, им можно хоть целиком арбитальную космическую станцию верифицировать, но недетерминированный, к сожалению).

Функция возвращает случайным образом то true то false.

Цитата:
есть что нить попроще?
Я думаю, проще быть не может.
Можешь нагуглить регулярные выражения для проверки телефонных нмоеров и адресов, их много всяких разных.
rrrFer вне форума Ответить с цитированием
Старый 19.07.2013, 07:48   #8
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Шикарно. Не сталкивался откровенно говоря. СПАСИБО!
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 19.07.2013, 14:00   #9
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Не тестил...

Код:
#include "stdio.h"
#include "string.h"
#include <stdarg.h>

int _strlen(const char* str, unsigned long max)
{
   for(int i = 0; i < max; i++)
	 if(!str[i])
	   return i;
   return 0;
}

bool _checkmask(const char* mask, const char* ph)
{
  if(!ph || !mask)
	return false;
  char _tmp;
  if(sscanf(ph,"%*[01234567890()+-]%c",&_tmp) > 0)
	return false;
  int _count = 0;
  const char* _pos = mask;
  do
  {
	_pos = strchr(_pos,'d');
	if(_pos)
	{
	  _count++;
	  _pos++;
	}
  }while(_pos);
  int _p[10] = {0,};
  int rv = sscanf(ph,mask,&_p[0],&_p[1],&_p[2],&_p[3],&_p[4],&_p[5],&_p[6],&_p[7],&_p[8],&_p[9]);
  return rv == _count;
}

bool _checkmasks(const char* ph,const int maskcount,...)
{
	va_list argp;
	va_start(argp,maskcount);
	for(int i = 0; i < maskcount; i++)
	{
	  const char* _mask = va_arg(argp,const char*);
	  if(_checkmask(_mask,ph))
        return true; 
	}
	va_end(argp);
	return false;
}

bool _checkphone(const char* ph)
{
  switch (_strlen(ph,(unsigned long)-1))
  {
	case 16:
	  return _checkmask("+7(%3d)%3d-%2d-%2d",ph);
	case 15:
	   return _checkmasks(ph,2,"+7(%3d)%3d-%4d","8(%3d)%3d-%2d-%2d");
	case 14:
	  return _checkmasks(ph,3,"+7(%3d)%3d","+7%6d-%2d-%2d","8(%3d)%3d-%4d");
	case 13:
	  return _checkmasks(ph,3,"+7%6d-%4d","8(%3d)%7d","8%6d-%2d-%2d");
	case 12:
	  return _checkmasks(ph,2,"+7%10d","8%6d-%4d");
	case 11:
	  return _checkmask("8%d10",ph);
	default:
	  return false;
  }
  return true;
}


int main()
{
  char ph[17] = "+7(921)123-12-14";
  char ph_1[16] = "+7(123)123-1234";
  bool rv = _checkphone(ph);
  rv = _checkphone(ph_1);
  return 0;
}
//---------------------------------------------------------------------------
Помог? Оставляем отзыв =)

Последний раз редактировалось Helloween; 19.07.2013 в 17:46.
Helloween вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами и строками .FROST. Общие вопросы по Java, Java SE, Kotlin 4 11.04.2013 10:17
Ассемблер. Работа со строками и массивами Toxa_SH Помощь студентам 0 29.05.2012 17:03
работа и массивами и строками ЛераСочи Помощь студентам 1 06.12.2010 00:50
Работа с массивами и строками ЛераСочи Помощь студентам 4 03.12.2010 22:01
Pascal.работа с символьными массивами и строками Иришка1989 Помощь студентам 3 19.01.2010 01:05