Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
senya_tyt
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 4
#1

Создание массива из строки

22.04.2013, 19:39. Просмотров 625. Ответов 14
Метки нет (Все метки)

Я ввожу любую строку без пробелов, например "A+B+!C":

C++
1
char *str=(Label1->Caption.c_str());
Как создать массив, каждый элемент которого - это символ из строки??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 19:39
Ответы с готовыми решениями:

Создание массива чисел путём анализа строки
Пишу программу - знакогенератор для микроконтроллера. задача: в...

Создание массива и поиск равных среднему арифметическому элементов массива
Создать массив (пусть это будет целочисленный массив), состоящий из 100...

Создание нового массива из определенных элементов другого массива
Здравствуйте. Мне нужно создать одномерный массив из элементов двумерного...

Переместить вниз строки массива, в которых сумма элементов строки меньше ноля
есть двумерный массив. нужно переставить строки вниз, у которых сумма...

Вывести на экран все строки данного массива одну за другой в виде целой строки
Дан двумерный массив , состоящий из букв. 5 строк и 7 столбцов. Вывести на...

14
ioioioi
96 / 28 / 6
Регистрация: 25.06.2010
Сообщений: 104
22.04.2013, 20:26 #2
Вы не поверите... но он у вас уже есть) Это str.
Обратиться к элементу можно так: str[i]. Строка заканчивается ноль-символом '\0'.
Это если конечно меотд c_str() возвращает указатель на корректную строку...
0
senya_tyt
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 4
22.04.2013, 20:51  [ТС] #3
а почему тогда не работает цикл?
C++
1
2
for (int i=0; i<8; i++)
{if ('!'==str[i] && 'A'==str[i+1]) {ListView1->Columns->Add(); ListView1->Column[n]->Caption="!A"; n+=1;}
не присваивается имя заголовку
0
ioioioi
96 / 28 / 6
Регистрация: 25.06.2010
Сообщений: 104
22.04.2013, 23:46 #4
Я борландовской/билдеровской библиотекой не пользуюсь и не могу сказать точно в чем проблема - мб вы не правильно ею пользуетесь.
Причин может быть несколько. Попробуйте выводить в отладку:
после того как присвоили значение str выведите в отладке его содержимое.
Проверьте ваше условие, быть может там такого сочетания символов действительно нет.
Проверьте срабатывание условия: добавьте отладочный вывод при срабатывании условия.
Кстати если у вас приложение работает нормально, значит скорее всего по указателю str действительно что то есть, иначе вылетало бы по сегфолту.
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 09:22 #5
senya_tyt, в первом сообщении у Вас 6 символов, а в третьем - цикл по 8. Откуда эти магические цифры? Указатель, возвращаемый c_str() валиден до первого изменения label1->Caption. А может и того меньше. Поэтому строку лучше скопировать через strcpy в заранее выделенную память. Если планируете использовать ее не сразу после вызова c_str().
0
GuGo1991
269 / 263 / 146
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 13:02 #6
Цитата Сообщение от senya_tyt Посмотреть сообщение
Как создать массив, каждый элемент которого - это символ из строки??
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
int main(){
    string adj;
    cin >> adj;
    char *let = (char *) adj.c_str();
    
    int j = 0, i = -1;
    char* mas = new char[j];
    do{
        i++;
        mas[j] = *let;
        j++;
        }
    while (*let++ != '\0');
    
    for(int l = 0; l < j; l++){
        cout << mas[l] << endl;
        }
    
    system("pause");
    return 0;
}
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 13:05 #7
Цитата Сообщение от GuGo1991 Посмотреть сообщение
C++
1
2
int j = 0, i = -1; 
char* mas = new char[j];
Круто Особенно писать потом в массив нулевой длины.
0
GuGo1991
269 / 263 / 146
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 13:16 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Круто Особенно писать потом в массив нулевой длины.
Длина массива увеличивается в зависимости от количества символов вводимой строки...
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 13:42 #9
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Длина массива увеличивается в зависимости от количества символов вводимой строки...
Что Вы говорите? Где же это увеличение происходит по-Вашему?
0
GuGo1991
269 / 263 / 146
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 14:01 #10
C++
1
2
mas[j] = *let;
        j++;
После присвоения определённому индексу массива символа строки, индекс инкрементируется и тем самым увеличивается длина массива. Согласен, всё выглядет неочень логично, но это мой, так сказать, эксперимент и сбоев пока что не было. Прокомпилировав код, можно убедиться в его работоспособности.
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 14:14 #11
GuGo1991, скажу Вам по секрету: когда Вы пишите что-то нечто такого:
C++
1
char* mas = new char[j];
Вы не должны использовать доступ к элементам mas с индексами >j-1. Потому что память под эти элементы не выделена. И, таким образом, вы будете обращаться к "чужой" памяти, в которой может быть всё что угодно. И в очередной прекрасный момент словите какую-нибудь чудесную ошибку на совершенно, вроде бы, ровном месте, в совсем другой части программы.
P.S. Вы же не используете индексы <0 почему-то. Так почему используете >j-1?
0
GuGo1991
269 / 263 / 146
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 17:28 #12
Ой, да что вы )) Всё это я прекрасно понимаю ))
А почему я использую (> j - 1)? Меня не интересует память в данный момент.
Вот моя задача:
Цитата Сообщение от senya_tyt Посмотреть сообщение
Как создать массив, каждый элемент которого - это символ из строки??
И она выполнена. А с размером массива я не буду разбираться...
P.S. А вы, без каких-либо секретов, приберегите свою иронию и сарказм.
Конечно, накинуться на новичка и блеснуть своим умом дело не из легких ))
Но лучше не тянуть резину, а сразу излагать сложившуюся проблему чтобы помочь "сбившемуся с пути", если конечно дело имеет место...
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 18:10 #13
Цитата Сообщение от GuGo1991 Посмотреть сообщение
И она выполнена.
Задача не выполнена, т.к. Ваш код содержит критические ошибки.
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Меня не интересует память в данный момент.
Зачем тогда вообще использовали вызов new char[j]? Вас же память не интересует.
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Но лучше не тянуть резину, а сразу излагать сложившуюся проблему
Я Вам сразу сказал, что массив нулевой длины. Но вы, видимо, из тех новичков, кто слишком самоуверен. Ничего, это пройдет, когда Ваша программа начнет сбоить на "ровном месте". Успехов в учебе
0
GuGo1991
269 / 263 / 146
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 18:32 #14
Цитата Сообщение от Tulosba Посмотреть сообщение
Я Вам сразу сказал, что массив нулевой длины.
Вот именно здесь вы и ошиблись. Если я написал mas[j], где j = 0, это не значит что массив нулевой.
Это массив с индексом 0, который может содержать один элемент. И не мне вам это объяснять.
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.04.2013, 18:45 #15
GuGo1991, посмотрите внимательно о чем я сказал. Сообщение #7.
0
23.04.2013, 18:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 18:45

Упорядочить строки массива в соответствии с ростом характеристики строки
Кто знает как решить радачу помогите please. Для заданного двумерного...

От значений элементов каждой строки двумерного массива вычесть значение минимального элемента этой строки
От значений элементов каждой строки двумерного массива вычесть значение...

Определить номер столбца массива, в котором расположен минимальный элемент четвертой строки массива
Доброго времени суток, помогите пожалуйста решить задачи по C++ 3)Дан...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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