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

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

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

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

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

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

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

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

Создание строки C++
Определить номер столбца массива, в котором расположен минимальный элемент четвертой строки массива C++
1. Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными э C++
C++ Переместить вниз строки массива, в которых сумма элементов строки меньше ноля
Создание массива чисел путём анализа строки C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.04.2013, 18:45     Создание массива из строки #15
GuGo1991, посмотрите внимательно о чем я сказал. Сообщение #7.
Yandex
Объявления
23.04.2013, 18:45     Создание массива из строки
Ответ Создать тему
Опции темы

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