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

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

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

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

22.04.2013, 19:39. Просмотров 593. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание массива из строки (C++):

Создание массива чисел путём анализа строки - C++
Пишу программу - знакогенератор для микроконтроллера. задача: в переменной обычная строка, например - "FIREFLY" массив для...

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

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

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

Упорядочить строки массива в соответствии с ростом характеристики строки - C++
Кто знает как решить радачу помогите please. Для заданного двумерного массива из n строк и m столбцов: Упорядочить строки массива в...

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

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
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 09:22 #5
senya_tyt, в первом сообщении у Вас 6 символов, а в третьем - цикл по 8. Откуда эти магические цифры? Указатель, возвращаемый c_str() валиден до первого изменения label1->Caption. А может и того меньше. Поэтому строку лучше скопировать через strcpy в заранее выделенную память. Если планируете использовать ее не сразу после вызова c_str().
0
GuGo1991
267 / 261 / 93
Регистрация: 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
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 13:05 #7
Цитата Сообщение от GuGo1991 Посмотреть сообщение
C++
1
2
int j = 0, i = -1; 
char* mas = new char[j];
Круто Особенно писать потом в массив нулевой длины.
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 13:16 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Круто Особенно писать потом в массив нулевой длины.
Длина массива увеличивается в зависимости от количества символов вводимой строки...
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 13:42 #9
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Длина массива увеличивается в зависимости от количества символов вводимой строки...
Что Вы говорите? Где же это увеличение происходит по-Вашему?
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 14:01 #10
C++
1
2
mas[j] = *let;
        j++;
После присвоения определённому индексу массива символа строки, индекс инкрементируется и тем самым увеличивается длина массива. Согласен, всё выглядет неочень логично, но это мой, так сказать, эксперимент и сбоев пока что не было. Прокомпилировав код, можно убедиться в его работоспособности.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 14:14 #11
GuGo1991, скажу Вам по секрету: когда Вы пишите что-то нечто такого:
C++
1
char* mas = new char[j];
Вы не должны использовать доступ к элементам mas с индексами >j-1. Потому что память под эти элементы не выделена. И, таким образом, вы будете обращаться к "чужой" памяти, в которой может быть всё что угодно. И в очередной прекрасный момент словите какую-нибудь чудесную ошибку на совершенно, вроде бы, ровном месте, в совсем другой части программы.
P.S. Вы же не используете индексы <0 почему-то. Так почему используете >j-1?
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 17:28 #12
Ой, да что вы )) Всё это я прекрасно понимаю ))
А почему я использую (> j - 1)? Меня не интересует память в данный момент.
Вот моя задача:
Цитата Сообщение от senya_tyt Посмотреть сообщение
Как создать массив, каждый элемент которого - это символ из строки??
И она выполнена. А с размером массива я не буду разбираться...
P.S. А вы, без каких-либо секретов, приберегите свою иронию и сарказм.
Конечно, накинуться на новичка и блеснуть своим умом дело не из легких ))
Но лучше не тянуть резину, а сразу излагать сложившуюся проблему чтобы помочь "сбившемуся с пути", если конечно дело имеет место...
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.04.2013, 18:10 #13
Цитата Сообщение от GuGo1991 Посмотреть сообщение
И она выполнена.
Задача не выполнена, т.к. Ваш код содержит критические ошибки.
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Меня не интересует память в данный момент.
Зачем тогда вообще использовали вызов new char[j]? Вас же память не интересует.
Цитата Сообщение от GuGo1991 Посмотреть сообщение
Но лучше не тянуть резину, а сразу излагать сложившуюся проблему
Я Вам сразу сказал, что массив нулевой длины. Но вы, видимо, из тех новичков, кто слишком самоуверен. Ничего, это пройдет, когда Ваша программа начнет сбоить на "ровном месте". Успехов в учебе
0
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.04.2013, 18:32 #14
Цитата Сообщение от Tulosba Посмотреть сообщение
Я Вам сразу сказал, что массив нулевой длины.
Вот именно здесь вы и ошиблись. Если я написал mas[j], где j = 0, это не значит что массив нулевой.
Это массив с индексом 0, который может содержать один элемент. И не мне вам это объяснять.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Привет! Вот еще темы с ответами:

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

Найти номер строки и столбца двумерного массива для минимального элемента этого массива - C++
Visual C ++ 2005 Express Edition помогите пожалуйста

запись массива в строку - считывание массива из строки. - C++
Под unix на си(не с++). Посоветуйте, как можно реализовать(меня интересуют функции, которые можно использовать для этого)): Есть...

1. Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными э - C++
1. Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с...


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

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

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