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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.60
delias
4 / 4 / 0
Регистрация: 16.07.2009
Сообщений: 87
#1

Можно ли задать размер строкового массива переменной - C++

05.10.2009, 14:50. Просмотров 6166. Ответов 6

Можно ли задать размер строкового массива переменной?

Например считаю сколько слов в введенном предложении а затем создаю массив с количеством элементов равным n
C++
1
2
3
4
5
6
7
8
9
10
11
12
char s1[80];
for (int i=0;*(s1+i)!='\0';i++)
    {
        if (*(s1+i)!=' ')continue;
        else
        {
            n++;
        }
    }
    cout<<n<<"\n"; //количество слов в предложении
 
char s3[n]; /пытаюсь создать новый строковый массив. как?
можно ли такое выполнить либо строковый массив задаётся строго числом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2009, 14:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли задать размер строкового массива переменной (C++):

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

Какой максимальный размер матриц можно задать для перемножения? - C++
Привет кодеры! Тут вопрос такой. Решил я перемножить матрицы и заинтересовался какой максимальный допустимый размер матрицы я могу задать...

Задать размер массива - C++
Доброго времени суток. Делаю программу, которая шифрует перестановкой с ключем. Суть алгоритма: 1. Есть исходное сообщение и ключ, по...

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

Как задать переменный размер массива - C++
Как задать переменный размер массива?

Задать размер массива в стороннем файле - C++
В файле записано число, допустим 5, нужно считать его и создать массив такого размера ifstream f(&quot;file.txt&quot;); int t; f &gt;&gt; t; ...

6
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
05.10.2009, 14:54 #2
C++
1
char *s3 = new char [n];
1
Evg
Эксперт CАвтор FAQ
17933 / 6159 / 408
Регистрация: 30.03.2009
Сообщений: 16,906
Записей в блоге: 27
05.10.2009, 14:57 #3
Цитата Сообщение от delias Посмотреть сообщение
можно ли такое выполнить либо строковый массив задаётся строго числом?
В стандартных реализациях языков Си\Си++ нельзя. Во всяких Си99, GNU-C можно. В виндовых компиляторах вроде бы тоже это поддерживается, но не уверен
0
delias
4 / 4 / 0
Регистрация: 16.07.2009
Сообщений: 87
05.10.2009, 15:04  [ТС] #4
ясно.
в принципе вариант Андрейки устраивает.
спасибо за помощь.
0
minitup
1 / 1 / 0
Регистрация: 27.09.2009
Сообщений: 8
05.10.2009, 16:29 #5
Цитата Сообщение от Evg Посмотреть сообщение
В стандартных реализациях языков Си\Си++ нельзя
Почему? Не поймите неправильно, я только учусь... Но причины невозможности инициализации некоторого массива значением количества слов другого массива мне неочевидны.
0
Evg
Эксперт CАвтор FAQ
17933 / 6159 / 408
Регистрация: 30.03.2009
Сообщений: 16,906
Записей в блоге: 27
05.10.2009, 16:57 #6
Цитата Сообщение от minitup Посмотреть сообщение
Почему? Не поймите неправильно, я только учусь... Но причины невозможности инициализации некоторого массива значением количества слов другого массива мне неочевидны.
Язык Си - по сути разрабатывался как низкоуровневый ассемблер, а потому в нём попросту нет каких-то конструкций, которые выражают какие-то макродействия. Когда ты пишешь массив неизвестного размера, то это означает, что под него нужно динамически выделить память, что противоречило изначальной концепции языка Си. Ну а в современное время язык стал одним из основных (включая Си++, С#), а потому в более поздних стандартах начали появляться и эти конструкции. Однако не все компиляторы перешли на эти стандарты
0
delias
4 / 4 / 0
Регистрация: 16.07.2009
Сообщений: 87
06.10.2009, 11:48  [ТС] #7
чтоб не засорять форум новой темой спрошу тут.
вот код:
C
1
2
3
4
5
6
7
8
9
10
char s1[80];
    int len=0,n=1;
    cin.getline(s1,sizeof(string));
    
    for (int i=0;*(s1+i)!='\0';i++,len++)
    {
        cout<<i<<"\t"<<*(s1+i)<<"\t"<<len<<"\n";
    }
    
    cout<<len<<"\n"; //количество букв в предложении
не могу понять, почему если ввожу предложение больше чем из 30 символов, то подсчитывает количество символов в массиве только до 30, дальше почему-то из цикла выходит, а ведь ввожу предложение более чем на 30 букв. неужто конец строки вставляется в каждый 30й элемент массива? не пойму почему так.

Добавлено через 24 минуты
ошибку нашёл, она кроется в sizeof(string)
вопрос снимаю
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2009, 11:48
Привет! Вот еще темы с ответами:

Как задать произвольный размер массива - C++
В общем проблема такая, есть задание (написанное каким то недалеким человеком). В нем не указано половины информации, то есть, делай как...

Не получается задать произвольный размер массива в struct - C++
Добрый вечер. Возникла проблема с лабараторной в универе. Не могу задать произвольный размер массива, т.е. чтобы его мог вводить...

Как задать размер массива равным значению входного аргумента - C++
Создаю массив длины, вводимой пользователем (динамические массивы не предлагать). Выдается ошибка: Error E2313 Векторочистка.cpp 75:...

Задать размер динамического массива через переменную, обявленную как extern - C++
Привет народ, скажите, почему не компилирует: #include&quot;stdafx.h&quot; #include&quot;iostream&quot; using namespace std; extern const int y; int...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
06.10.2009, 11:48
Ответ Создать тему
Опции темы

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