예제 #1
0
파일: code.cpp 프로젝트: samrrr/Labs
// ввод строк
char* string_input(char* header, char* inputitem)
{
	char *tmp;       //временная переменная (вводимая строка)
	char rec;        // переменная хранящая вводимый символ
	int i = 0;       // вспомогательный индекс
	int stop = 0;    // маркер корректности и прекращения ввода
	int correct = 0; // маркер подтверждения корректности ввода со стороны пользователя

	do
	{
		tmp = NULL;  // временная переменная для хранения введенной строки

		do
		{
			do
			{
				system("cls");
				rewind(stdin);
				printf_s("\n Минимальное количество вводимых символов - %d", MIN_STRING_LENGTH);
				printf_s("\n Максимальное количество вводимых символов - %d", MAX_STRING_LENGTH);
				printf_s("\n Ввод всех символов свыше первых %d будет проигнорирован", MAX_STRING_LENGTH);
				printf_s("\n Последовательный ряд знаков пунктуации будет заменен 1-м знаком в данном ряду");
				printf_s("\n Начало ввода с пробела, знаков пунктуации или нажатия Enter недопустимо");
				printf_s("\n Для завершения ввода нажмите Enter\n\n");
				printf_s("\n %s", header);
				printf_s("\n\n %s: ", inputitem);

				// ввод и проверка корректности ввода первого символа строки

				rec = getchar();

				if (punctuation(rec) || rec == '\n' || rec == ' ' || rec == '\t')
				{
					system("cls");
					printf_s("\n ОШИБКА.\n\n Не начинайте ввод с пробелов, знаков пунктуации или нажатия Enter\n\n ");
					system("pause");
				}
				else
				{
					tmp = (char*)malloc(sizeof(char*));
					*tmp = toupper(rec);
					i = 1;
				}
			} while (punctuation(rec) || rec == '\n' || rec == ' ' || rec == '\t');

			// ввод последующих символов

			while ((rec = getchar()) != '\n' && i < MAX_STRING_LENGTH)
			{
				// замена табуляции пробелом

				if (rec == '\t')
					rec = ' ';

				// пропуск избыточных знаков препинания и пробелов

				if (((punctuation(rec)) && punctuation(tmp[i - 1])) || (rec == ' ' && tmp[i - 1] == ' '))
					continue;
				else
				{
					tmp = (char*)realloc(tmp, (i + 1)*sizeof(char));

					if (tmp[i - 1] == ' ') // если перед символом пробел
					{
						tmp[i++] = toupper(rec); // ввод с заглавной буквы

						if (i >= MAX_STRING_LENGTH)
						{
							printf_s("\n Длина строки достигла лимита в %d символов", MAX_STRING_LENGTH);
							printf_s("\n Все введенные символы, свыше первых %d будут проигнорированны\n\n ", MAX_STRING_LENGTH);
							system("pause");
						}
					}
					else
					{
						tmp[i++] = tolower(rec); // ввод прописных букв, в случае если перед символом не стоит пробел

						if (i >= MAX_STRING_LENGTH)
						{
							printf_s("\n Длина строки достигла лимита в %d символов. Строка будет обрезана\n\n ", MAX_STRING_LENGTH);
							system("pause");
						}
					}
				}
			}

			if (*(tmp + i - 1) == ' ') //если последний символ пробел
				i--;
			else
				tmp = (char*)realloc(tmp, (i + 1)*sizeof(char)); //выделение памяти под символ конца строки

			*(tmp + i) = '\0'; //конец строки

			if (i < MIN_STRING_LENGTH) //если введено менее 2 символов
			{
				system("cls");
				printf_s("\n ОШИБКА \n\n Введите более %d символов\n\n ", MIN_STRING_LENGTH);
				system("pause");
			}
			else
				stop = 1; // ввод корректен
		} while (!stop);

		// подтверждение точности ввода данных со стороны пользователя
		do
		{
			system("cls");
			printf_s("\n %s\n\n", header);
			printf_s("\n Проверьте введенные данные: %s", tmp);
			printf_s("\n\n Исправить введенные данные?\n\n 1 - Нет\n 0 - Да");
			correct = userchoice();

			if (correct < 0 || correct > 1)
			{
				system("cls");
				printf_s("\n ОШИБКА\n");
				printf_s("\n Введите существующий пункт\n\n ");
				system("pause");
			}

		} while (correct < 0 || correct > 1);

	} while (!correct); // пока пользователь не подвердит точность введенных данных

	return tmp;
}
예제 #2
0
파일: code.cpp 프로젝트: samrrr/Labs
//коррекция считанной строки из файла
char* str_read(char* str, int* i)
{
	char* tmp = NULL; //хранит строку с нужным значением
	int l = *i; //индекс считанной строки
	int j = 0; //индекс строки с нужным значением

	while (str[l] == ' ' || punctuation(str[l]) && str[l] != '\0')
		l++;
	if (str[l] == '\0')
		return NULL;
	else
	{
		while (str[l] != ' ' && j < MAX_STRING_LENGTH)
		{
			if (punctuation(str[l]) && punctuation(str[l + 1]))
				l++;
			else
			{
				tmp = (char*)realloc(tmp, (j + 1)*sizeof(char));
				tmp[j++] = str[l++];
			}
		}

		if (j == MAX_STRING_LENGTH)
			while (str[l] != '|')
				++l;

		if (str[l] == ' ' && str[l + 1] != '|')
		{
			if (j != MAX_STRING_LENGTH - 1)
			{
				tmp = (char*)realloc(tmp, (j + 1)*sizeof(char));
				tmp[j++] = str[l++];

				while (str[l] == ' ' && str[l] != '\0')
					l++;
				if (str[l] == '\0')
					return NULL;
				else
				{
					while (str[l] != ' ' && j < MAX_STRING_LENGTH)
					{
						if (punctuation(str[l]) && punctuation(str[l + 1]))
							i++;
						else
						{
							tmp = (char*)realloc(tmp, (j + 1)*sizeof(char));
							tmp[j++] = str[l++];
						}
					}

					if (j == MAX_STRING_LENGTH)
						while (str[l] != '|')
							++l;
				}
			}
		}

		if (j < MIN_STRING_LENGTH)
		{
			tmp = NULL;
			tmp = (char*)malloc(sizeof("0\0"));
			tmp = "0\0";
		}
		else
		{
			tmp = (char*)realloc(tmp, (j + 1)*sizeof(char));
			tmp[j] = '\0';
		}

		*i = l;

		return tmp;
	}
}
예제 #3
0
파일: user.cpp 프로젝트: Flowneee/lab_sec
bool User::validate_password(std::wstring password)
{
    return latin(password) && cyrillic(password) && number(password)
        && punctuation(password);
}