Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.03.2019
Сообщений: 6
1

Кривое преобразования с int в char, массивы

23.08.2019, 18:57. Показов 1773. Ответов 4
Метки нет (Все метки)

Объясните где я сделал ошибку? почему arr и sprob в зависимости от b ++; ведут себя так, и почему так кривая получается строка?b ++; является важным элементом логики программы однако когда его нет (закомментирован b ++ строка выводится правильно (не кривой);
Суть проблемы смотрите на скринах.
Какой должен быть результат: arr "\~"
Реальность: arr ""~"
Почему так?
C++ (Qt)
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include<iostream>
#include<string>
using namespace std;
class Brute {
    int rozrad = 1,size;
    string password = "";
    char *sprob = nullptr;
    string password1() {
        string a = "q1w2e3";
        this->password = a[0];
        return a;
    }
    string BruteF() {
        int i = 33;
        for (; i < 127; i++) {
            sprob[rozrad] = (char)i;            
            if(sprob == password) {   return sprob;  }
            if (sprob[rozrad] == (char)126) 
            { 
                this->size = rozrad + 2;
                Sprob_plus1(); 
                i = 33; 
            }
        }
    }
public:
    string GetPassword() {
        if (this->password == "") { this->password = password1(); };
        return password;
    }
    void SetPassword() {
        cin >> this->password;
    }
    string Start() {
        CreateSprob();
        return BruteF();
    }
    void CreateSprob()
    {
        if (sprob == nullptr) { this->sprob = new char[2]; sprob[rozrad] = '\0'; this->rozrad = 0; }
    }
    void Sprob_plus1() 
    {
        if (sprob[rozrad] != (char)126)
        {  
            char *arr = new char[this->size];
            for (int i = 0; i < size; i++)
            {
                if (i == rozrad)
                { 
                    char a=sprob[i];
                    int b = (int)a;
                    b++;
                    arr[i]=(char)b; //ошибка
                    continue;
                }
                arr[i] = sprob[i];
            }
            delete[]sprob;
            sprob = arr;
            arr = nullptr;
        }
        if (sprob[rozrad] == (char)126) {
            if (rozrad == 0) {
            sprob[rozrad] = '!'; 
            char *newsprob = new char[this->size+1],*Zsprob;
            for (int i = 0; i < size;i++) {
                if (i == 0) { newsprob[0] = '!'; }
                newsprob[i+1] = sprob[i];
            }
            delete[]sprob;
            sprob = newsprob;
            newsprob = nullptr;
            }
            else { this->rozrad--; Sprob_plus1(); sprob[rozrad--] = (char)33;  }
        }
        this->rozrad++;
    }
};
int main() {
    Brute a;
    cout<<a.GetPassword()<<endl;
    cout <<a.Start()<<endl;
    system("pause"); return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Кривое преобразования с int в char, массивы  
Изображения
  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2019, 18:57
Ответы с готовыми решениями:

Нет преобразования int в char*
int main() { char s; char* kz = 0; cout &lt;&lt; &quot;Vvedite stroku: &quot;; cin &gt;&gt; s; // строку...

Преобразования массива с типа int к типу char
Помогите решить задачу. Требуется создать шаблон класса для преобразования массива с типа int к...

Как работают явные преобразования из char[] в int?
Решаю я одну задачу, в ней нужно считать информацию о книгах, вложить это всё в бинарное дерево и...

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо...

4
24 / 14 / 10
Регистрация: 11.08.2019
Сообщений: 58
23.08.2019, 21:28 2
Лучший ответ Сообщение было отмечено M32 как решение

Решение

Всё работает правильно. У Вас символ '!' (33), который вы инккриментируете. Он превращается в
C++
1
'\"' (34)
Почитайте про управляющие символы и коды ASCII.
1
0 / 0 / 0
Регистрация: 31.03.2019
Сообщений: 6
23.08.2019, 21:45  [ТС] 3
аналогично
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>
using namespace std;
int main() {
    int size =5,n=2;
    
    char *a=new char[size];
    a[size ] = '\0';
    a[0]={'!'};
    a[1] = { '!' };
    a[2] = { '!' };
    a[3] = { '!' };
    a[4] = { '!' };
    
    for (int i =n; i < size + 1; i++) {
        if (n == i) { a[n]++; continue; }
        a[i-1] = i;
 
 
    }
    cout << "word:\t"<<a<<endl;
    delete[]a;
    system("pause");
    return 0;
}
0
49 / 33 / 9
Регистрация: 27.12.2017
Сообщений: 1,398
23.08.2019, 21:54 4
Лучший ответ Сообщение было отмечено M32 как решение

Решение

Цитата Сообщение от M32 Посмотреть сообщение
Какой должен быть результат: arr "\~"
Реальность: arr ""~"
M32, не знаю как нызвается но \ делает так что следющий символ в случае с " считается как часть строки ,сделано для того чтобы Вы могли вывести что-то подобное : std::cout << """ << std::endl;
вывести так :
C++
1
std::cout << "\"" << std::endl;
1
15040 / 8059 / 1940
Регистрация: 30.01.2014
Сообщений: 13,654
23.08.2019, 22:11 5
Цитата Сообщение от ReYalp Посмотреть сообщение
не знаю как нызвается
Называется экранирование символа.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2019, 22:11

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как превести из char* в int и наоборот из int в char*?
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому...

Форматирование строк, char to int & int to char
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn ...

Ошибка "error C2446: :: нет преобразования "int" в "char *"
Ошибка: &quot;error C2446: :: нет преобразования &quot;int&quot; в &quot;char *&quot; Когда нажимаю двойным кликом на...

Подскажите пожалуйста с int main(int argc, char*argv[])
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc&gt;1 то...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.