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

string[] в char[][] или char[] - C++

Восстановить пароль Регистрация
 
DoctorMengele
 Аватар для DoctorMengele
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 11:52     string[] в char[][] или char[] #1
Приветствую! Можно ли одномерный массив типа string переписать в двумерный или одномерный типа char? Если да, то как? Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 12:01     string[] в char[][] или char[] #2
C++
1
2
3
4
5
6
7
8
9
std::string str("blabla");
char * chars = new char[str.size()+1]
for(int i =0; i < str.size(); i++)
{
chars[i] = str[i];
}
chars[str.size()] = '\0';
//
delete []chars;
или
C++
1
2
 std::string str("bla bla");
char * chars = str.to_str();
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.01.2014, 12:04     string[] в char[][] или char[] #3
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
25
26
27
#include <iostream>
#include <string>
 
int main() {
    
    const int string_num = 3;
    const int string_len = 10;
    
    char ca[string_num][string_len] = { 0 };
    
    std::string sa[string_num] = { "odin", "dva", "tri" };
    
    for( int i=0; i<string_num; ++i )
    {
        for( int j=0; j<sa[i].length(); ++j )
        {
            ca[i][j] = sa[i][j];
        }
    }
    
    for( int i=0; i<string_num; ++i )
    {
        std::cout << ca[i] << std::endl;
    }
    
    return 0;
}
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
31.01.2014, 12:05     string[] в char[][] или char[] #4
C++
1
2
3
4
5
6
    string str;
    getline(cin,str);
    char a*=new char[str.size()+1];
 
    strcpy(a , str.c_str());
    cout<<a;
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,575
Записей в блоге: 17
31.01.2014, 12:07     string[] в char[][] или char[] #5
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
2
std::string str("bla bla");
 char * chars = str.to_str();
Так нехорошо делать, вы получаете указатель на массив которых хранится внутри str, а не копируете от туда данные.
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,588
31.01.2014, 12:36     string[] в char[][] или char[] #6
Цитата Сообщение от Avazart Посмотреть сообщение
Так нехорошо делать, вы получаете указатель на массив которых хранится внутри str, а не копируете от туда данные.
А если копировать не надо? От задачи же зависит хорошо или плохо. Надо просто понимать разницу.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 12:44     string[] в char[][] или char[] #7
Avazart, ну да DrOffset, все сказал я просто привел варианты как можно
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,575
Записей в блоге: 17
31.01.2014, 13:21     string[] в char[][] или char[] #8
Цитата Сообщение от DrOffset Посмотреть сообщение
А если копировать не надо? От задачи же зависит хорошо или плохо.
Нужно избегать таких случаев.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main()
{
    std::string s="x";
    const char* ch= s.c_str();
    s="yyyyyyyyyyyyyyyyyyyyyy";
 
    std::cout<<ch[0]<<std::endl;
 
    getchar();
    return 0;
}
Мы можем получать самые разные вещи на выходе в зависимости от того как изменится размер "s", пример надуманный, но если допустить что приложение может быть многопоточным, то такие ошибки вероятны.
DoctorMengele
 Аватар для DoctorMengele
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 14:05  [ТС]     string[] в char[][] или char[] #9
Всем большое спасибо. Но как действовать, допустим, если длина массива string[] неизвестна? То есть если string[] – разбитый на строки файл, что ли.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 14:07     string[] в char[][] или char[] #10
strlen длина char[] строки, если std::string, то size или length
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.01.2014, 14:13     string[] в char[][] или char[] #11
Цитата Сообщение от DoctorMengele Посмотреть сообщение
если длина массива string[] неизвестна?
массивы, которые создаются как:
C++
1
type name[N];
имеют фиксированный на момент компиляции размер (если речь не о VLA).
Даже если N явно не указано, то осуществляется вычисление
C++
1
type name[] = { el1, el2, el3 }; // N=3
DoctorMengele
 Аватар для DoctorMengele
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 14:22  [ТС]     string[] в char[][] или char[] #12
А, да, это понятно. Вопрос был лишний. Просто мысли спутались.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 13:38     string[] в char[][] или char[]
Еще ссылки по теме:

C++ ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
Преобразование char в char* или разделить на две строки C++
Приведение массива char[] (или char* ) в LPCTSTR C++

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

Или воспользуйтесь поиском по форуму:
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,588
01.02.2014, 13:38     string[] в char[][] или char[] #13
Цитата Сообщение от Avazart Посмотреть сообщение
Нужно избегать таких случаев.
Нужно знать что делаешь.
Скажем, как избежать, если есть API принимающее char const *, а у нас строка в std::string? К этому нельзя относится как "хорошо" или как "плохо". Это инструмент. Если им пользоваться грамотно, то проблем не будет.

Цитата Сообщение от Avazart Посмотреть сообщение
Мы можем получать самые разные вещи на выходе в зависимости от того как изменится размер "s", пример надуманный, но если допустить что приложение может быть многопоточным, то такие ошибки вероятны.
Начать надо с того, что std::string в принципе не рассчитан на использование в качестве разделяемого ресурса между потоками (операции с ним необходимо защищать объектами синхронизации). И даже если мы будем всегда копировать его содержимое куда-то, то это копирование необходимо будет защищать.

Добавлено через 7 минут
В общем я за то, что не давать информацию в качестве догматов, вроде "плохо" или "хорошо", а давать ссылки и информацию, use cases. Чтобы человек разбирался и понимал, что он делает и как работает его программа.
Yandex
Объявления
01.02.2014, 13:38     string[] в char[][] или char[]
Ответ Создать тему
Опции темы

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