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

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

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

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

31.01.2014, 11:52. Просмотров 801. Ответов 12
Метки нет (Все метки)

Приветствую! Можно ли одномерный массив типа string переписать в двумерный или одномерный типа char? Если да, то как? Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2014, 11:52     string[] в char[][] или char[]
Посмотрите здесь:
есть массив char. есть строка string. как присвоить значению string-a значение char-a? C++
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) C++
C++ Строка: чем отличается строки string, char, char*?
C++ Где и почему используют ту или иную строку std::string, char[], System::String^ ?
C++ char char* string и константные значения
std::string и/или char* C++
Кириллица в string или *char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
642 / 563 / 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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
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
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,453
Записей в блоге: 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
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
31.01.2014, 12:36     string[] в char[][] или char[] #6
Цитата Сообщение от Avazart Посмотреть сообщение
Так нехорошо делать, вы получаете указатель на массив которых хранится внутри str, а не копируете от туда данные.
А если копировать не надо? От задачи же зависит хорошо или плохо. Надо просто понимать разницу.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 12:44     string[] в char[][] или char[] #7
Avazart, ну да DrOffset, все сказал я просто привел варианты как можно
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,453
Записей в блоге: 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
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 14:05  [ТС]     string[] в char[][] или char[] #9
Всем большое спасибо. Но как действовать, допустим, если длина массива string[] неизвестна? То есть если string[] – разбитый на строки файл, что ли.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 14:07     string[] в char[][] или char[] #10
strlen длина char[] строки, если std::string, то size или length
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
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[]
Еще ссылки по теме:
Преобразование char в char* или разделить на две строки C++
C++ ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
Реализация функции char *padl(const char *string, int len, int c=' ') C++
Приведение массива char[] (или char* ) в LPCTSTR C++
C++ Как int конвертировать в string или char?

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

Или воспользуйтесь поиском по форуму:
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
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[]
Ответ Создать тему
Опции темы

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