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

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

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

Студворк — интернет-сервис помощи студентам
Лаба по компьютерным сетям.
Выполняется в 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2018, 21:00
Ответы с готовыми решениями:

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

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

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

17
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
09.10.2018, 21:09
А можно использовать функцию isalpha из cctype?
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
09.10.2018, 21:16  [ТС]
all_this_pain, можно, работает, но моя проблема была в том, что я не знал, как удалить символы, не юзая erase.
Теперь я решил эту траблу, но вместо вывода у меня рандомные символы выводятся.
0
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
09.10.2018, 21:23
Цитата Сообщение от xi8 Посмотреть сообщение
Теперь я решил эту траблу, но вместо вывода у меня рандомные символы выводятся.
А показать весь код функции?
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 09:51  [ТС]
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
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 17:09
вот это:
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  [ТС]
all_this_pain, все равно не работает.
Изображения
 
0
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 19:50
это:
Цитата Сообщение от 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  [ТС]
all_this_pain, мне же нужно удалить символы от A до Z, то есть буквы.
0
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 19:57
Цитата Сообщение от xi8 Посмотреть сообщение
мне же нужно удалить символы от A до Z, то есть буквы.
Да. И для этого вы создаете новый массив, в котором будут храниться только буквы, поэтому вам нужно проверять на наличее букв, чтобы добавить их в новый массив.
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 19:59  [ТС]
all_this_pain, ну так я добавляю в массив все, что не является буквами, и этот массив является результатом работы программы.
0
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 20:05
Цитата Сообщение от xi8 Посмотреть сообщение
но вместо вывода у меня рандомные символы выводятся.
Так как результатом Вашей работы являются НЕ буквы (и его Вы и выводите в консоль), то будут показываться рандомные символы или вообще неоторбражаемые символы, тут уж как повезет. Следовательно, у Вас все хорошо.

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

Цитата Сообщение от xi8 Посмотреть сообщение
которых нет в исходной строке
А с чего Вы взяли, что их нет в исходной строке? Вы смотрите не на ASCII-код, а на значение.
0
1 / 1 / 0
Регистрация: 08.10.2018
Сообщений: 47
10.10.2018, 20:35  [ТС]
all_this_pain, мне нужно, чтобы вернулись цифры, если они есть, или пустота, если в строке только буквы
0
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 20:49
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  [ТС]
all_this_pain, -.-
Так это не удаление, а просто вывод.
У меня приложение клиент-сервер.
0
 Аватар для all_this_pain
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
10.10.2018, 21:16
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.10.2018, 21:16
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru