0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 8
1

Strcmp и пробелы

26.12.2019, 12:12. Показов 1852. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Необходимо реализовать проверку пароля. Пароль должен быть с пробелами, как я поняла strcmp не умеет сравнивать строки с пробелами. Адекватного решения придумать не могу, поэтому прошу помощи. Также будет неплохо если после попытки ввода неверного пароля программа будет предлагать ввести пароль еще раз, а не закрываться. Кроме goto в голову ничего не лезет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus"); 
    char arr[50]="Это пароль";   
    char mas[50];        
   
    cout<<"Введите пароль: ";
    cin>>mas;
    if(strcmp(arr,mas)==0) //Проверка если значение которое было возвращенно с функции равно 0 тогда 
        cout<<"Верный пароль"<<endl; //Вывести сообшение
    else                    //Иначе
        cout<<"Пароль не правильный"<<endl; //Отказать в доступе
        
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2019, 12:12
Ответы с готовыми решениями:

Написать функцию, которая удаляет все сдвоенные пробелы пробелы из строки
Написать функцию, которая удаляет все сдвоенные пробелы пробелы из строки, полученной в качестве...

Во введенном тексте удалить все пробелы, если пробелы присутствуют
Создать программу, которая спрашивает имя пользователя и здоровается с ним. Затем, предлагается...

Удалить повторяющиеся пробелы, также пробелы в начале и в конце строки (ассемблерная вставка)
Написать ассемблерную вставку, реализующую следующую обработку строки: согласно варианту. Оформить...

Как удалить все пробелы в строке, и если есть кавычки, то между ними пробелы заменить на %
Как удалить все пробелы в строке, и если есть кавычки, то между ними пробелы заменить на %? Вот...

7
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
26.12.2019, 12:14 2
бесконечный цикл подойдет?
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 8
26.12.2019, 12:14  [ТС] 3
Думаю да
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
26.12.2019, 12:18 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus"); 
    char arr[50]="Это пароль";   
    char mas[50];        
   
    while(true){
    cout<<"Введите пароль: ";
    cin>>mas;
    if(strcmp(arr,mas)==0){ //Проверка если значение которое было возвращенно с функции равно 0 тогда 
        cout<<"Верный пароль"<<endl; //Вывести сообшение
        break;
    }
    else                    //Иначе
        cout<<"Пароль не правильный"<<endl; //Отказать в доступе
    }
    return 0;
}
не тестил)

Добавлено через 1 минуту
Цитата Сообщение от grond777 Посмотреть сообщение
Пароль должен быть с пробелами, как я поняла strcmp не умеет сравнивать строки с пробелами.
тут дело не в strcmp а в том что cin берет до пробела, можно использовать
C++
1
cin.getline(mas, sizeof(mas));
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 8
26.12.2019, 12:21  [ТС] 5
Выводит "неверный пароль" даже в случае верного
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
26.12.2019, 12:25 6
Цитата Сообщение от grond777 Посмотреть сообщение
Выводит "неверный пароль" даже в случае верного
Это еще из за ввода русских букв, попробуй ради интереса на английском и с пробелами - должно работать
0
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 8
26.12.2019, 12:28  [ТС] 7
Нужно именно чтобы с кириллицей работало)
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
26.12.2019, 12:30 8
Лучший ответ Сообщение было отмечено grond777 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
#include <cstring>
#include <Windows.h>
 
using namespace std;
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char arr[50] = "Это пароль";
    char mas[50];
 
    while (true) {
        cout << "Введите пароль: ";
        cin.getline(mas, 50);
        if (strcmp(arr, mas) == 0) { //Проверка если значение которое было возвращенно с функции равно 0 тогда 
            cout << "Верный пароль" << endl; //Вывести сообшение
            break;
        }
        else                    //Иначе
            cout << "Пароль не правильный" << endl; //Отказать в доступе
    }
    return 0;
}
Вот WinApi способ который нагуглил, не знаю как это сделать средствами С++ сейчас
1
26.12.2019, 12:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2019, 12:30
Помогаю со студенческими работами здесь

Удалить в строке все лишние пробелы, то есть серии подряд идущих пробелов заменить на одиночные пробелы
Я уже решал эту задачу с помощью циклов и символьных массивов, и выкладывал на этот форум , но я не...

Описать функцию, которая удаляет из заданной строковой величины все лишние пробелы. Пробелы считаются лишними,
Описать функцию, которая удаляет из заданной строковой величины все лишние пробелы. Пробелы...

Дана символьная строка, содержащая буквы, цифры и пробелы. Написать строку задом наперед, удалив из нее все пробелы
Дана символьная строка, содержащая буквы, цифры и пробелы. Написать строку задом наперед, удалив из...

STRCMP
Как работает функция strcmp? strncmp? while(L&lt;R) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru