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

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

09.10.2018, 21:00. Показов 8757. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru