Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
1

Удаление из массива символов символов от A до Z

09.10.2018, 21:00. Показов 8115. Ответов 17

Author24 — интернет-сервис помощи студентам
Лаба по компьютерным сетям.
Выполняется в CLR, поэтому через string не решить, т.к так функция erase не поддерживается.
Помогите, пожалуйста.

Добавлено через 1 час 44 минуты
Вот мой вариант, но он не работает.
Может, кто-то что-то исправит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int n = 0,j = 0;
            char *rez = new char[n];
            if (strlen(b) == 10) {
                for (int i = 0; i < strlen(b); i++) {
                    if (((b[i] > 'a') && (b[i] < 'z')) || ((b[i] > 'A') && (b[i] < 'Z'))) {
                        rez[j] = b[i];
                        n++;
                        realloc(rez, n * sizeof(char));
                        j++;
                    }
                }
            }
            else rez = "L!=10";
Добавлено через 4 минуты
Допилил код, но теперь какая-то трабла с кодировкой.
Вместо нормально ответа выводятся какие-то символы.
ЧЯДНТ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int n = 0,j = 0;
            char *rez = new char[n];
            if (strlen(b) == 10) {
                for (int i = 0; i < strlen(b); i++) {
                    if (((b[i] > 'a') && (b[i] < 'z')) || ((b[i] > 'A') && (b[i] < 'Z'))) {
                        rez[j] = b[i];
                        n++;
                        rez = (char*) realloc(rez, n * sizeof(char));
                        j++;
                    }
                }
            }
            else rez = "L!=10";
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2018, 21:00
Ответы с готовыми решениями:

Удаление повторяющихся символов массива
Надо сделать так что бы повторяющиеся символы массива удалялись, а сам массив сдвигался.

Удаление элементов из массива символов
Написать массив из символов. Удалить количество элементов, начиная с заданой позиции.

Удаление двумерного динамического массива символов
Программа разбивает строку на слова и записывает каждое слово по отдельности в двумерный...

Введите массив символов из 12 элементов. Удвоить все коды символов массива
Условие :Введите массив символов из 12 элементов. Удвоить все коды символов массива. Заранее...

17
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
09.10.2018, 21:09 2
А можно использовать функцию isalpha из cctype?
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
09.10.2018, 21:16  [ТС] 3
all_this_pain, можно, работает, но моя проблема была в том, что я не знал, как удалить символы, не юзая erase.
Теперь я решил эту траблу, но вместо вывода у меня рандомные символы выводятся.
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
09.10.2018, 21:23 4
Цитата Сообщение от xi8 Посмотреть сообщение
Теперь я решил эту траблу, но вместо вывода у меня рандомные символы выводятся.
А показать весь код функции?
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 09:51  [ТС] 5
all_this_pain,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[CPP]int n = 0,j = 0;
            for (int i = 0; i < strlen(b); i++) {
                if (!isalpha(b[i])) {
                    n++;
                }
            }
            std::cout << n << std::endl;
            char *rez = new char[n];
            std::cout << rez << std::endl;
            if (strlen(b) == 10) {
                for (int i = 0; i < strlen(b); i++) {
                    if (!isalpha(b[i])) {
                        rez[j] = b[i];
                        j++;
                    }
                }
                //rez = (char*)realloc(rez, n * sizeof(char));
                std::cout << rez << std::endl;
            }
            else rez = "Length not equals 10";
[/CPP]
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 17:09 6
вот это:
C++
1
char *rez = new char[n];
заменить на это:
C++
1
char *rez = new char[n+1];
перед этим:
C++
1
std::cout << rez << std::endl;
вставьте это:
C++
1
rez[n] = '\0';
Си-строка должна заканчиваться терминальным нулем, т.е. фактическая длинна массива - количество символов + 1.
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 19:44  [ТС] 7
all_this_pain, все равно не работает.
Изображения
 
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 19:50 8
это:
Цитата Сообщение от xi8 Посмотреть сообщение
C++
1
if (!isalpha(b[i]))
на это:
Цитата Сообщение от xi8 Посмотреть сообщение
C++
1
if (isalpha(b[i]))
Иначе вы в массив rez записываете все символы, являющиеся НЕ буквами, следовательно у вас и идет мусор.
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 19:54  [ТС] 9
all_this_pain, мне же нужно удалить символы от A до Z, то есть буквы.
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 19:57 10
Цитата Сообщение от xi8 Посмотреть сообщение
мне же нужно удалить символы от A до Z, то есть буквы.
Да. И для этого вы создаете новый массив, в котором будут храниться только буквы, поэтому вам нужно проверять на наличее букв, чтобы добавить их в новый массив.
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 19:59  [ТС] 11
all_this_pain, ну так я добавляю в массив все, что не является буквами, и этот массив является результатом работы программы.
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 20:05 12
Цитата Сообщение от xi8 Посмотреть сообщение
но вместо вывода у меня рандомные символы выводятся.
Так как результатом Вашей работы являются НЕ буквы (и его Вы и выводите в консоль), то будут показываться рандомные символы или вообще неоторбражаемые символы, тут уж как повезет. Следовательно, у Вас все хорошо.

P.S.
Если Вы работаете с char как с массивом, а не как с Cи-строкой, то все предыдущие вещи про терминальные нули и т.д. Вам не нужны.
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 20:06  [ТС] 13
all_this_pain, найс, а как тогда мне сделать так, чтобы результатом работы были ни буквы, ни рандомные символы, которых нет в исходной строке?
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 20:07 14
Цитата Сообщение от xi8 Посмотреть сообщение
all_this_pain, найс, а как тогда мне сделать так, чтобы результатом работы были ни буквы, ни рандомные символы, которых нет в исходной строке?
Вернемся к истокам мироздания. Что именно Вы хотите извлечь из массива?

Цитата Сообщение от xi8 Посмотреть сообщение
которых нет в исходной строке
А с чего Вы взяли, что их нет в исходной строке? Вы смотрите не на ASCII-код, а на значение.
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 20:35  [ТС] 15
all_this_pain, мне нужно, чтобы вернулись цифры, если они есть, или пустота, если в строке только буквы
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 20:49 16
xi8, привести к типу int и вывести
C++
1
2
3
for(int i = 0; i < n; i++)
    cout << int(rez[i]) << " ";
}
если нужен 16-ричный формат, то добавьте
C++
1
#include <iomanip>
и измените кода вывода на:
C++
1
2
3
for(int i = 0; i < n; i++)
    cout << hex << int(rez[i]) << "
}
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 21:04  [ТС] 17
all_this_pain, -.-
Так это не удаление, а просто вывод.
У меня приложение клиент-сервер.
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 21:16 18
xi8, ваши вопросы вырваны из контекста.
Вы пишете функцию, удаляющую символы из массива?
Массив, с которым вы работаете динамический?
Если да, то просто передайте указатель в функцию, создайте новый массив, который заполните всеми значениями с НЕ буквами и верните указатель на этот новый массив (не забыв почистить память по указателю на старый, если он вам конечно больше не нужне)

C++
1
2
3
4
5
6
char* delete_alph(char *arr) {
    //Определение размера нового массива
    char *new_array = new char[n];
    //Заполнение массива new_array НЕ буквами
    return new_array;
}
0
10.10.2018, 21:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2018, 21:16
Помогаю со студенческими работами здесь

Удаление символов
Скажите, как удалить все символы в строке после 3-его

Удаление символов в С++
я не опытный программист и прошу помощи)) нужно удалить N символов, с 3-ей строки, #include...

Удаление повторяющихся символов
Есть строка символов, я её обрабатываю, удаляю слово с повторяющимися символами,дело в том что...

Удаление символов из строки
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace...


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

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