68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383
1

Сравнение строк, чисел и т.д

02.08.2013, 18:20. Показов 2700. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот, допустим, хочу я сделать проверку пароля
Пишу:
C++
1
2
3
4
5
int main () {
string login = "qwerty123";
cout << "Enter password: ";
cin >> login;
}
И нужно сделать проверку пароля, с правильным паролем

Пробовал так:
C++
1
2
3
if (str login, "qwerty123") {
cout << "Valid login!";
}
Но не работает, такое, как я помню (статью читал), используется с char'ами
Так как же сравнить строку?
Или, допустим, числа, ведь всё может понадобиться
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2013, 18:20
Ответы с готовыми решениями:

сравнение строк
как сравнить строки на совпадающие? идея такая...есть исходная строка типа char вводим с клавы ещё...

Сравнение строк
Доброго времени суток! Имеется задачка: для двух заданных строк символов вывести без повторений...

Сравнение строк
Добрый вечер. Пользователь должен ввести слово которое находиться в инструкции if и ему должно...

Сравнение строк
Тупо и банально нужно сравнить строки средствами с++. Гуглил, но не нашел работающих примеров, толи...

28
10 / 10 / 4
Регистрация: 19.02.2013
Сообщений: 140
02.08.2013, 18:50 2
Но не работает, такое, как я помню (статью читал), используется с char'ами
Так как же сравнить строку?
Или, допустим, числа, ведь всё может понадобиться
Сравнение строк:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
#include <conio.h>
 
void _tmain()
{
    char* u_log = "qwerty";
    char* login = "qwerty";
 
    if(strcmp(u_log, login) == 0)
        cout << "Good =)";
    else
        cout << "Error!!!";
 
    _getch();
}
функция strcmp(s1, s2) сравнивает две строки и если s1 = s2, то результат равен 0. Если s1 < s2, то отрицательный, s1 > s2 - положительный.
1
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 18:54  [ТС] 3
А можно ли как-то сравнить string'и (*trollface*), int'ы?
0
10 / 10 / 4
Регистрация: 19.02.2013
Сообщений: 140
02.08.2013, 18:57 4
Цитата Сообщение от Даниил Посмотреть сообщение
А можно ли как-то сравнить string'и (*trollface*), int'ы?
ты в консоли пишешь? или форма?
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
02.08.2013, 18:57 5

Даниил, просто стоит изучить основы языка, хотя желание написать что-то своё похвально.
Но тут могу тебя огорчить: такую проверку пароля:
C++
1
if(strcmp(u_log, login) == 0)
легко взломают

dmal, забыл. Новичок не догадается вставить
C++
1
#include <string.h>
1
10 / 10 / 4
Регистрация: 19.02.2013
Сообщений: 140
02.08.2013, 19:00 6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение

Но тут могу тебя огорчить: такую проверку пароля:
C++
1
if(strcmp(u_log, login) == 0)
легко взломают
Ну вопрос был в том, что как сравнить строки =)
0
Ghost
174 / 174 / 40
Регистрация: 16.09.2012
Сообщений: 526
02.08.2013, 19:00 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
 
int main() {
    string s1 = "qwerty", s2;
    cout << "enter password: ";
    cin >> s2;
    s2 == s1 ? cout << "ok\n" : cout << "no\n";
    return 0;
}
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
02.08.2013, 19:14 8
Тогда уж
C++
1
cout << (s2 == s1 ? "ok\n" : "no\n");
1
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.08.2013, 19:43 9
Нехорошо это - пароли в явном виде хранить.
Любой желающий сможет открыть бинарник в блокноте и подсмотреть пароль (который может и в других местах использоваться).
Лучше хранить хэш, по которому невозможно точно восстановить пароль.
Но и это не защитит от взлома, достаточно будет просто убрать условый переход.
0
31 / 35 / 11
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 19:44 10
Kuzia domovenok, а посредством чего можно взломать такой пароль?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
02.08.2013, 19:48 11
dima55501, Заглядывания в бинарник.
0
31 / 35 / 11
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 19:55 12
ForEveR, а можно поподробнее? Вот я только что написал такую программу. .exe файл лежит у меня на рабочем столе. Как мне узнать что находится в char'е?

Код
int main()
{
     char *test = "qwerty";
     return 0;
}
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
02.08.2013, 19:57 13
открой в блокноте же!
Цитата Сообщение от dima55501 Посмотреть сообщение
Kuzia domovenok, а посредством чего можно взломать такой пароль?
Цитата Сообщение от diagon Посмотреть сообщение
открыть бинарник в блокноте и подсмотреть пароль
А помимо блокнотов есть дизассемблеры, отладчики, хекс-редакторы... что там ещё есть?
0
31 / 35 / 11
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 20:00 14
Kuzia domovenok, открыл .exe файл в блокноте (Programmers notepad), там символы. Попробовал поменять кодировку, но ничего не изменилось, только программа перестала запускаться
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
02.08.2013, 20:04 15
Цитата Сообщение от dima55501 Посмотреть сообщение
Kuzia domovenok, открыл .exe файл в блокноте (Programmers notepad), там символы. Попробовал поменять кодировку, но ничего не изменилось, только программа перестала запускаться
ну так кто ж тебе даст просто так поменять? Как минимум нужно сохранить длину строки. А по-хорошему, смотреть на это дело в дизассемблере и соображать.
0
31 / 35 / 11
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 20:05 16
Kuzia domovenok, в общем я видимо ошибался, когда думал, что пароль там будет написан большими буквами посередине
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
02.08.2013, 20:15 17
Цитата Сообщение от dima55501 Посмотреть сообщение
в общем я видимо ошибался, когда думал, что пароль там будет написан большими буквами посередине
Однако, он будет в открытом виде, так что если блокнот не подумал, что этот файл в Unicode, то надо просто внимательнее посмотреть.

Добавлено через 1 минуту
Да, строчку эту надо бы где-нибудь в проге использовать, а иначе её после оптимизации может не остаться уже.
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
02.08.2013, 20:56 18
dima55501, а ты попробуй подобрать здесь пароль
Вложения
Тип файла: rar crack_my_password.rar (4.7 Кб, 12 просмотров)
0
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 21:13  [ТС] 19
Дадите исходник подберём

Добавлено через 5 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
забыл. Новичок не догадается вставить
Не обижайте так, ведь новичок это не означает что пол часа назад начал С++ изучать

Добавлено через 7 минут
Решил так, чтоб особо не заморачиваться

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
25
26
27
// Проверка строк (пароля).cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
 
void valid () {
    cout << "Valid password! =)" << endl;
}
 
int main() {
    string s1 = "qwerty", s2;
    cout << "Enter password: ";
    cin >> s2;
    if (s2 == s1) {
    valid();
    }
    else {
    cout << "Error!No valid password!" << endl;
    }
    getch();
    return 0;
}
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
02.08.2013, 21:23 20
Цитата Сообщение от Даниил Посмотреть сообщение
Дадите исходник подберём
вполне реально без исходника обойтись.
Цитата Сообщение от Даниил Посмотреть сообщение
Решил так, чтоб особо не заморачиваться
Заморачиваться не стал, но и проблема защиты от взлома не исчезла.
0
02.08.2013, 21:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2013, 21:23
Помогаю со студенческими работами здесь

Сравнение строк
Не прибегая к функциям сравнения строк, создайте программу, которая запрашивает у пользователя две...

Сравнение строк
Здравствуйте.Что нужно чтоб оператор if реагировал на строку, а не на цифру. Например: #include...

Сравнение строк
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; using namespace...

Сравнение строк
Есть две стринговых строки которые нужно сравнить с учетом пробелов.Пробовал применять c_str() и...


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

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

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