Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dimp
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 18
#1

Длина массива - C++

26.06.2013, 12:59. Просмотров 1058. Ответов 8
Метки нет (Все метки)

Создал свой класс строка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class mstring
{
private:
    char *pSt;
    int len;
public:
    mstring();
    mstring(string);
    mstring(char *);
    mstring(int);
    mstring(const char);
    mstring(const mstring &);
    ~mstring();
//...
};
Если нужны будут определения функций, выложу.
Вопрос в следующем можно ли при вызове конструктора mstring(char *) узнать длинну массива. То есть:
C++
1
2
3
4
5
6
7
8
9
int main()
{
    char *t=new char[5];
    char q[4];
    mstring a(t),b(q);
 
 
    return 0;
}
при вызове a(t) и b(q) знать, что длина t равна 5, а длина q 4. (функция strlen() выдает неверный результат, так как ни один из массивов не заканчивается нулевым символом)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2013, 12:59     Длина массива
Посмотрите здесь:

длина массива - C++
напишите пожалуйста программу которая бы выполняла ввод 10 значений в массив и дальнейший расчот длины этого массива.. очень надо..

Длина массива - C++
Подскажите пожалуйста, как вывести на экран количество элементов в массиве, делаю так, а выводит мягко говоря не то что надо: #include...

Длина пустого массива - C++
Я создал пустой двумерный динамический массив, но когда нахожу его длину, мне пишет что она равна 1. Видимо я что-то не так делаю. Как...

Инициализация массива. Длина строки - C++
Ребят, добрый день. Ломаю голову и не могу сообразить, как в массив занести не констант. строчку? Ну т.е не константой, например: mas...

Длина short[] - Почему размер массива внутри make отличается? - C++
Доброе время суток, господа. #include <iostream> #include <vector> #include <algorithm> using namespace std; template...

Заменить каждую серию, длина которой больше k, на один наименьший элемент массива - C++
3. Дан массив, состоящий из n элементов. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии – количество этих...

Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением - C++
нужно решение Дано целое число L (>0) и целочисленный массив размера N. Заме- нить каждую серию массива, длина которой равна L, на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.06.2013, 13:19     Длина массива #2
C++
1
2
3
4
5
6
7
String::String(const char *s)
{
    lenght = strlen(s);
    sPtr = new char[lenght + 1];
    assert(sPtr != 0);
    strcpy(sPtr, s);
}
Добавлено через 2 минуты
Цитата Сообщение от Dimp Посмотреть сообщение
(функция strlen() выдает неверный результат, так как ни один из массивов не заканчивается нулевым символом)
Эта функция возвращает длину игнорируя символ окончания строки, поэтому длина будет strlen() + 1

Добавлено через 6 минут
C++
1
2
3
char *t=new char[5];
    char q[4];
    mstring a(t),b(q);
А зачем это? Вы создаете объекты с пустыми массивами. Но при этом у Вас есть конструктор для таких случаев.
C++
1
2
mstring();
mstring(int);
То есть в мейне должно быть:
C++
1
2
mstring a; // вызывает конструктор mstring();
mstring b(4);  // вызывает конструктор mstring(int);
Добавлено через 1 минуту
Или при вызове конструктора преобразования
C++
1
mstring(char *);
Вам нужно инициализировать Ваши массивы.
Dimp
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 18
26.06.2013, 13:29  [ТС]     Длина массива #3
C++
1
2
3
4
5
6
7
8
9
int main()
{
    char *t=new char[5];
    char q[5];
    for(int i=0;i<5;i++)
        t[i]=q[i]='a'+i;
    cout<<strlen(t)<<' '<<strlen(q)<<endl;
    return 0;
}
Я их не инициализировал, чтобы просто сообщение было покороче. Вот теперь инициализировал, но
Я вас не совсем понял. Код написанный выше выводит "22 19",а не "5 5".
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
26.06.2013, 13:30     Длина массива #4
Цитата Сообщение от Dimp Посмотреть сообщение
Я вас не совсем понял. Код написанный выше выводит "22 19",а не "5 5".
потому что нет терминирующего нуля в конце
Dimp
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 18
26.06.2013, 13:36  [ТС]     Длина массива #5
Так вот в этом и вопрос, как узнать длинну массива, если в конце нет нулевого символа. Ведь когда мы их задаем, я четко пишу 5 и, мне кажется, где-то в памяти должен быть зафиксирован факт, что длина массивов q и t равна именно 5.
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.06.2013, 13:40     Длина массива #6
То, что вы делаете вот тут:
C++
1
2
3
4
5
6
7
8
9
int main()
{
    char *t=new char[5];
    char q[5];
    for(int i=0;i<5;i++)
        t[i]=q[i]='a'+i;
    cout<<strlen(t)<<' '<<strlen(q)<<endl;
    return 0;
}
инициализирует массив символов. Строка должна заканчиваться '\0'
C++
1
2
3
4
5
6
7
8
char *t=new char[5];
    char q[5];
    for(int i=0;i<5;i++)
        t[i]=q[i]='a';
    t[4] = q[4] = '\0';
    cout<<strlen(t)<<' '<<strlen(q)<<endl;
    cout << t << endl;
    delete [] t;
или как вариант для инициализации использовать cin.getline(t, 4);
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
26.06.2013, 13:44     Длина массива #7
Цитата Сообщение от Dimp Посмотреть сообщение
в памяти должен быть зафиксирован факт, что длина массивов q и t равна именно 5.
Где и как что храниться зависит от платформы, так что в плюсах нет встроенных средств для этого.
Однако, для массивов(именно для массивов, а не для указателей на первый элемент)
C++
1
char q[5];
можно использовать sizeof
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
26.06.2013, 13:49     Длина массива #8
Цитата Сообщение от Dimp Посмотреть сообщение
* * mstring(string);
* * mstring(char *);
* * mstring(int);
* * mstring(const char);
Вот так должно быть
C++
1
2
3
4
mstring(const string&);
mstring(const char*);
explicit mstring(int);
explicit mstring(char);
И не опускайте имена параметров функций в интерфейсе класса.
Цитата Сообщение от Dimp Посмотреть сообщение
Вопрос в следующем можно ли при вызове конструктора mstring(char *) узнать длинну массива.
Eсли строка не заканчивается '\0', узнать длину строки не удастся. В данном случае можно сделать два конструктора: один вида mstring(const char* str); для строк заканчивающихся '\0', и второй [I]mstring(const char* arr, int n), где n - количество элементов в массиве.
Цитата Сообщение от Мимино Посмотреть сообщение
sPtr = new char[lenght + 1];
* * assert(sPtr != 0);
new по умолчанию генерирует исключение, а не возрващает 0. К тому же assert, это не то средство которым нужно отлавливать такую вещь, как нехватка памяти.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2013, 13:52     Длина массива
Еще ссылки по теме:

Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением - C++
Здравствуйте.Дано целое число L (&gt; 0) и целочисленный массив размера N. Заменить каждую серию массива, длина которой равна L, на один...

Превратить массив целых чисел размерности N, удалив из массива все серии, длина которых больше k - C++
Помогите плиз Превратить массив целых чисел размерности N, удалив из массива все серии, длина которых больше k. Вроде написала...

длина строки - C++
Здравствуйте. Есть такой код. char stroka; char *str=new char ; cout&lt;&lt;str&lt;&lt;&quot; - &quot;&lt;&lt;strlen(str)&lt;&lt;endl&lt;&lt;stroka&lt;&lt;&quot; - ...

Длина вектора - C++
Я написал код для нахождения длины вектора проблема в том что она не выводит мне числа после запятой в чём проблема в задание написано...

длина вектора - C++
как правильно вывести длину вектора у меня класс вектор, все работает , с этим запутался, помогите пожалуйста в интерефейсе double...


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

Или воспользуйтесь поиском по форуму:
Dimp
0 / 0 / 0
Регистрация: 27.11.2012
Сообщений: 18
26.06.2013, 13:52  [ТС]     Длина массива #9
Тогда последний вопрос. А если задача состоит в том, что нужно еще и проверить, является ли данный набор символов строкой(с нулевым символом в конце) (во время выполнения конструктора)?
Получается даже на массив длинной 5, в котором нет нулевого символа (в первых 5ти символах), но есть нулевой символ где-то за массивом, мы дадим положительный ответ и нам это никак не обойти?
Пока писал, уже ответили
Yandex
Объявления
26.06.2013, 13:52     Длина массива
Ответ Создать тему
Опции темы

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