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

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

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

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

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

Приветствую! Можно ли одномерный массив типа string переписать в двумерный или одномерный типа char? Если да, то как? Заранее спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2014, 11:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос string[] в char[][] или char[] (C++):

есть массив char. есть строка string. как присвоить значению string-a значение char-a? - C++
есть массив char. есть строка string. как присвоить значению string-a значение char-a?

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) - C++
Почему компилятор на это матерится? ObjA.Show("A"); deprecated conversion from string constant to 'char*' #include <iostream> ...

Строка: чем отличается строки string, char, char*? - C++
Помогите разобраться,совсем плохо идёт,чем отличается строки string,char,char* И если можно пару примеров Буду весьма признательна

Где и почему используют ту или иную строку std::string, char[], System::String^ ? - C++
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните пожалуйста где нужно использовать...

char char* string и константные значения - C++
Робот может перемещаться в 4 направлениях c-Север, u- Юг, z- Запад, v- Восток ипринемать 3 цифровые команды 0-продолжать движение 1 на...

std::string и/или char* - C++
Здравствуйте. пишу метод построчной обработки данных из файла Вот он: bool loadFromFile(std::string fileName) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 12:01 #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();
1
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.01.2014, 12:04 #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;
}
1
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
31.01.2014, 12:05 #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;
1
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,674
Записей в блоге: 17
31.01.2014, 12:07 #5
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
2
std::string str("bla bla");
 char * chars = str.to_str();
Так нехорошо делать, вы получаете указатель на массив которых хранится внутри str, а не копируете от туда данные.
0
DrOffset
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
31.01.2014, 12:36 #6
Цитата Сообщение от Avazart Посмотреть сообщение
Так нехорошо делать, вы получаете указатель на массив которых хранится внутри str, а не копируете от туда данные.
А если копировать не надо? От задачи же зависит хорошо или плохо. Надо просто понимать разницу.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 12:44 #7
Avazart, ну да DrOffset, все сказал я просто привел варианты как можно
0
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,674
Записей в блоге: 17
31.01.2014, 13:21 #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", пример надуманный, но если допустить что приложение может быть многопоточным, то такие ошибки вероятны.
1
DoctorMengele
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 14:05  [ТС] #9
Всем большое спасибо. Но как действовать, допустим, если длина массива string[] неизвестна? То есть если string[] – разбитый на строки файл, что ли.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 14:07 #10
strlen длина char[] строки, если std::string, то size или length
1
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.01.2014, 14:13 #11
Цитата Сообщение от DoctorMengele Посмотреть сообщение
если длина массива string[] неизвестна?
массивы, которые создаются как:
C++
1
type name[N];
имеют фиксированный на момент компиляции размер (если речь не о VLA).
Даже если N явно не указано, то осуществляется вычисление
C++
1
type name[] = { el1, el2, el3 }; // N=3
1
DoctorMengele
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 14:22  [ТС] #12
А, да, это понятно. Вопрос был лишний. Просто мысли спутались.
0
DrOffset
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
01.02.2014, 13:38 #13
Цитата Сообщение от Avazart Посмотреть сообщение
Нужно избегать таких случаев.
Нужно знать что делаешь.
Скажем, как избежать, если есть API принимающее char const *, а у нас строка в std::string? К этому нельзя относится как "хорошо" или как "плохо". Это инструмент. Если им пользоваться грамотно, то проблем не будет.

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

Добавлено через 7 минут
В общем я за то, что не давать информацию в качестве догматов, вроде "плохо" или "хорошо", а давать ссылки и информацию, use cases. Чтобы человек разбирался и понимал, что он делает и как работает его программа.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2014, 13:38
Привет! Вот еще темы с ответами:

Кириллица в string или *char - C++
Подскажите как можно реализовать? (нужно сравнить string на кириллице с другим массивом или строкой на кириллице!)

Преобразование char в char* или разделить на две строки - C++
Пытаюсь сделать программу под linux. Возникла проблема, описанная в заголовке. Мне нужно разделить строку в char на две по символу ? либо...

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*') - C++
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName; freopen(fileName, &quot;r&quot;, stdin); while...

Реализация функции char *padl(const char *string, int len, int c=' ') - C++
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.02.2014, 13:38
Ответ Создать тему
Опции темы

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