Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/145: Рейтинг темы: голосов - 145, средняя оценка - 4.80
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313

Массив: Создать массив для хранения различных символов...

03.09.2011, 16:49. Показов 30276. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать массив для хранения различных символов (буквы и различные знаки)
Необходимо узнать его размер. Как это сделать? В массиве хранятся

C++
1
2
// символы поодиночке
char *a = new char [35];
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2011, 16:49
Ответы с готовыми решениями:

Как создать шаблонный класс-массив для хранения объектов?
Есть абстрактный класс Figure. Есть два производных от него класа: Field i TicTаc. И есть шаблонный класс Arr. У Field'и есть поле...

Создать класс для хранения календарных дат. Обеспечить возможность работы с датами в различных форматах
2. Создать класс для хранения календарных дат. Обеспечить возможность работы с датами в различных форматах, изменения даты на заданное...

Дан целочисленный массив А[п], среди элементов есть одинаковые. Создать массив из различных элементов А[п]
Помогите пожалуйста с поставленной задачей: Дан целочисленный массив А, среди элементов есть одинаковые. Создать массив из различных...

17
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
03.09.2011, 16:55
Самое простое запомнить, сколько выделяли памяти.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.09.2011, 17:46
Цитата Сообщение от hello19 Посмотреть сообщение
Нужно создать массив для хранения различных символов (буквы и различные знаки)
Необходимо узнать его размер. Как это сделать? В массиве хранятся
- для строки прото:
длинна массива = strlen(a); //для подключения нужен string.h
1
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
04.09.2011, 02:25
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
длинна массива = strlen(a);
Ноу, это длина строки. Это не одно и тоже.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
04.09.2011, 03:33
Цитата Сообщение от kazak Посмотреть сообщение
Ноу, это длина строки. Это не одно и тоже.
насколько я понял -=ЮрА=-, то имеется ввиду что char = 1 байт => strlen(a) = искомая память в байтах
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.09.2011, 12:08
Цитата Сообщение от kazak Посмотреть сообщение
Ноу, это длина строки.
поэтому и оговорил
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- для строки прото:
(писал под пример ТС
Цитата Сообщение от hello19 Посмотреть сообщение
// символы поодиночке
char *a = new char [35];
)


Цитата Сообщение от alkagolik Посмотреть сообщение
насколько я понял -=ЮрА=-, то имеется ввиду что char = 1 байт => strlen(a)
- нет ты путаешь sizeof(a) со strlen(a) (см здесь http://www.cplusplus.com/refer... ng/strlen/)
Если же есть желание использовать sizeof(a), то число элементов одномерного массива определяется выражением
i
C++
1
nt nElements =  sizeof(a)/sizeof(a[0])
или же
C++
1
sizeof(a)/sizeof((типа переменных массива а))
- указанный приём не работает для динамически созданных массивов - т.е для задания ТС применим только метод со strlen.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
04.09.2011, 16:35
оно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int sizeMass(char mass[]);
int main()
{
    char/*1 байт*/ *a = new char[35];
    a= "123456";
    std::cout << "длина массива в байтах = " << sizeMass(&a[0]) << "\n" << a;
    return 0;
}
int sizeMass(char mass[]){
    int i=0;
    while (mass[i]!= NULL) ++i;
    return i;
}
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
04.09.2011, 16:44
Цитата Сообщение от alkagolik Посмотреть сообщение
int sizeMass(char mass[]){
* * int i=0;
* * while (mass[i]!= NULL) ++i;
* * return i;
}
- эквивалентно strlen(mass), зачем код удлинять?

Добавлено через 2 минуты
PS:Не веришь, убедись сам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstring>
 
int sizeMass(char mass[]);
int main()
{
    char/*1 áàéò*/ *a = new char[35];
    a= "123456";
    std::cout << "äëèíà ìàññèâà â áàéòàõ = " <<sizeMass(&a[0])<<"\r\n";
    std::cout << "äëèíà ìàññòâà ïî strlen = "<<strlen(a)<<"\r\n";
    return 0;
}
int sizeMass(char mass[]){
    int i=0;
    while (mass[i]!= NULL) ++i;
    return i;
}
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
04.09.2011, 17:31
Цитата Сообщение от hello19 Посмотреть сообщение
Необходимо узнать его размер. Как это сделать? В массиве хранятся
C++
1
2
// символы поодиночке
char *a = new char [35];
Во-первых размер массива тебе и так всегда известен(потому как ты этот размер и устанавливаешь). Во-вторых абсолютно непонятно зачем ты используешь динамический массив как статический(задаешь размер константой).

Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
2
char/*1 байт*/ *a = new char[35];
 a= "123456";
Ты присвоил указателю a адрес строкового литерала "123456". В результате сразу две ошибки:
1) неконстантный указатель на константную область памяти;
2) всё что было выделено с помощью оператора new безвозвратно потеряно(утечка памяти).
Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
while (mass[i]!= NULL)
Принципиально неверное использование макроса NULL. В конце C-строк находится символ '\0'. Макрос NULL ипользуется при работе с указателями.
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
04.09.2011, 17:37
hello19, размер динамического массива узнать никак нельзя, так что нужно его запоминать.
Варианты выше с использованием strlen (и его "самописной реализацией") - вообще ни к месту и "длину массива в байтах" не возвращают.
0
Заблокирован
04.09.2011, 18:21
Цитата Сообщение от rangerx Посмотреть сообщение
Ты присвоил указателю a адрес строкового литерала "123456". В результате сразу две ошибки:
1) неконстантный указатель на константную область памяти;
...
Это не является ошибкой. Стандарт С++ разрешает адрес строкового литерала присваивать неконстантному указателю. Другое дело, что лучше не пользоваться этим, чтобы не вводить пользователей вашего кода в заблуждение.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
04.09.2011, 22:51
1) неконстантный указатель на константную область памяти;
2) всё что было выделено с помощью оператора new безвозвратно потеряно(утечка памяти).
да ладно. первое всего лишь для демонстрации, а второе сам ТС задал. К делу... выделен массив char*, тип char = 1 байт, размер массива в байтах разве не равен количеству элементов, исключающих '\0'~NULL? т.е. массив заполнен на 5 элементов, значит размер массива есть 5 байт.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
04.09.2011, 23:54
Цитата Сообщение от alkagolik Посмотреть сообщение
да ладно. первое всего лишь для демонстрации
Для демонстрации чего? Как делать не надо? ))
Цитата Сообщение от alkagolik Посмотреть сообщение
а второе сам ТС задал.
TC всего лишь выделил память. А ты, вместо того чтобы воспользоваться функцией strcpy, решил её(память) просто "отстегнуть" происвоив указателю совершенно другой адрес... Насчёт самой функции: она вычисляет длину C-строки, но TC ни слова не говорил о строках...
P.S. Проще использовать std::vector<char> и не мучиться )
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
05.09.2011, 00:47
rangerx, троллить будешь школоту. Я не синтаксис представил, а мысль, которая заключается в том что размер массива char равен количеству элементов массива (? уже в четвертый раз спрашиваю). Синтаксис лепи себе как угодно. Оправдываться еще буду тут... ща в нос дам! шутка конечно. Но ведь ты тоже "юморной" йопт, поймешь.
фотку видишь мою? я такой))
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.09.2011, 02:52
Цитата Сообщение от alkagolik Посмотреть сообщение
Я не синтаксис представил, а мысль, которая заключается в том что размер массива char равен количеству элементов массива
это та мысль, которую ты озвучил в посте #7 (или #5)? Так вот, она неверная.
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
05.09.2011, 03:16
Цитата Сообщение от Nameless One Посмотреть сообщение
это та мысль, которую ты озвучил в посте #7 (или #5)? Так вот, она неверная
ну наконец-то дождался ответа
0
3 / 3 / 0
Регистрация: 26.02.2014
Сообщений: 27
06.04.2019, 21:11
Есть очень извращенный способ получить длину динамического массива, созданного оператором new []
// проверено в VS 2017 на версии с++11, за другие компиляторы не отвечаю
C++
1
size_t arrlen (void*p) { return ((size_t*) p)[-3]; } // размер массива p в байтах
Почему и как это работает объяснять не буду, лучше досканально изучите операци new []
0
3 / 3 / 0
Регистрация: 28.11.2018
Сообщений: 242
06.04.2019, 22:01
groser, это работает исключительно в VS2017. Из-за самой ide-шки, предусмотрено хранение длины массива перед его началом(по адресам).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2019, 22:01
Помогаю со студенческими работами здесь

Создать тип данных для хранения строки символов. С перегрузкой оператора
Полностью задание: &quot;Создать тип данных для хранения строки символов. Перегрузить оператор унарный «-» для изменения порядка символов в...

Создать массив из различных элементов исходного
Кто чем может.Новичок ,только учусь 2. Дан целочисленный массив А, среди элементов которого есть одинаковые. Создать массив из...

Создать массив из различных элементов массива
Доброго времени суток. Не могу написать программу. Задание такое: Дан целочисленный массив {a1,a2...an} с количеством элементов n. Создать...

Создать класс Mystring, предназначенный для хранения строки из символов типа char. Класс имеет метод для определения дли
Создать класс Mystring, предназначенный для хранения строки из символов типа char. Класс имеет метод для определения длины строки. Не...

Создать массив состоящий из различных элементов исходного массива
Всем привет! Помогите с задачкой, говорят простая, но я не могу ее додумать %-) &quot;Заполнить одномерный числовой массив целыми...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru