Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- void outputTask() {
- cout << "Данная программа проверяет, является ли заданная строка идентификатором" << endl;
- }
- void chooseInput(bool& isFromFile) {
- bool isNotCorrect;
- int num;
- do {
- isNotCorrect = false;
- cout << "Выберите откуда вводить данные: 0, если из консоли, 1 если из файла:" << endl;
- cin >> num;
- if ((cin.fail()) or ((num != 0) and (num != 1))) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- isFromFile = (num == 1);
- }
- string choosePath() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь к файлу для ввода информации:" << endl;
- cin >> path;
- ifstream fin(path);
- if ((!fin.is_open()) or (path.length() < 5)) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- else {
- if (path[path.length() - 1] != 't' and path[path.length() - 2] != 'x' and path[path.length() - 3] != 't' and path[path.length() - 4] != '.') {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- }
- fin.close();
- } while (isNotCorrect);
- return path;
- }
- void inputFromConsole(string& str) {
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите строку:" << endl;
- getline(cin, str);
- for (int i = 0; i < str.length(); i++) {
- if (str[i] == ' ') {
- isNotCorrect = true;
- }
- }
- if (isNotCorrect or (str.length() < 1)) {
- cout << "Ошибка ввода! Повторите попытку." << endl;
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- }
- void inputFromFile(string& str) {
- string path;
- bool isCorrect;
- cout << "При записи из файла учтите, что в файле нужные данные должны быть записаны на первой строке." << endl;
- isCorrect = true;
- path = choosePath();
- ifstream fin(path);
- getline(fin, str);
- for (int i = 0; i < str.length(); i++) {
- if (str[i] == ' ') {
- isCorrect = false;
- }
- }
- if (!isCorrect or (str.length() < 1)) {
- cout << "Ошибка ввода! Введите нужную строку с клавиатуры." << endl;
- inputFromConsole(str);
- }
- fin.close();
- }
- string inputString(bool isFromFile) {
- string str;
- if (isFromFile) {
- inputFromFile(str);
- }
- else {
- inputFromConsole(str);
- }
- return str;
- }
- void checkForLetters(string str, bool& error) {
- error = false;
- for (int i = 0; i < str.length(); i++) {
- if (!(((str[i] > 'a') and (str[i] < 'z')) or ((str[i] > 'A') and (str[i] < 'Z')) or (str[i] == '_') or ((str[i] > '0') and (str[i] < '9')))) {
- error = true;
- }
- }
- }
- void checkForFirstLetter(string str, bool& error) {
- error = !(((str[0] > 'a') and (str[0] < 'z')) or ((str[0] > 'A') and (str[0] < 'Z')) or (str[0] == '_'));
- }
- bool checkForTrue(string str, bool*& errors) {
- errors = new bool[2];
- errors[0] = false;
- errors[1] = false;
- checkForFirstLetter(str, errors[0]);
- checkForLetters(str, errors[1]);
- return (!(errors[1] or errors[0]));
- }
- string choosePathForOutput() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь к файлу для вывода информации:" << endl;
- cin >> path;
- ofstream fout(path);
- if ((!fout.is_open()) or (path.length() < 5)) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- else {
- if (path[path.length() - 1] != 't' and path[path.length() - 2] != 'x' and path[path.length() - 3] != 't' and path[path.length() - 4] != '.') {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- }
- fout.close();
- } while (isNotCorrect);
- return path;
- }
- void outputAnswerInFile(bool isCorrect, bool* errors) {
- string path;
- path = choosePathForOutput();
- ofstream fout(path);
- if (isCorrect) {
- fout << "Данная строка является идентификатором!" << endl;
- }
- else {
- fout << "Строка не является идентификатором!" << endl;
- if (errors[0]) {
- fout << "Строка начинается не с английской буквы либо нижнего подчеркивания!" << endl;
- }
- if (errors[1]) {
- fout << "Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!" << endl;
- }
- }
- fout.close();
- cout << "Данные успешно записаны в файл!" << endl;
- }
- void outputAnswer(bool isCorrect, bool* errors) {
- if (isCorrect) {
- cout << "Данная строка является идентификатором!" << endl;
- }
- else {
- cout << "Строка не является идентификатором!" << endl;
- if (errors[0]) {
- cout << "Строка начинается не с английской буквы либо нижнего подчеркивания!" << endl;
- }
- if (errors[1]) {
- cout << "Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!" << endl;
- }
- }
- outputAnswerInFile(isCorrect, errors);
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- bool isFromFile;
- string str;
- bool* errors;
- bool isCorrect;
- outputTask();
- chooseInput(isFromFile);
- str = inputString(isFromFile);
- isCorrect = checkForTrue(str, errors);
- outputAnswer(isCorrect, errors);
- delete[] errors;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement