Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
1

string[] в char[][] или char[]

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

Author24 — интернет-сервис помощи студентам
Приветствую! Можно ли одномерный массив типа string переписать в двумерный или одномерный типа char? Если да, то как? Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2014, 11:52
Ответы с готовыми решениями:

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

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

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

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

12
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
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
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
31.01.2014, 12:07 5
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
2
std::string str("bla bla");
 char * chars = str.to_str();
Так нехорошо делать, вы получаете указатель на массив которых хранится внутри str, а не копируете от туда данные.
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
31.01.2014, 12:36 6
Цитата Сообщение от Avazart Посмотреть сообщение
Так нехорошо делать, вы получаете указатель на массив которых хранится внутри str, а не копируете от туда данные.
А если копировать не надо? От задачи же зависит хорошо или плохо. Надо просто понимать разницу.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
31.01.2014, 12:44 7
Avazart, ну да DrOffset, все сказал я просто привел варианты как можно
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
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
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 14:05  [ТС] 9
Всем большое спасибо. Но как действовать, допустим, если длина массива string[] неизвестна? То есть если string[] – разбитый на строки файл, что ли.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
31.01.2014, 14:07 10
strlen длина char[] строки, если std::string, то size или length
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
0 / 0 / 0
Регистрация: 31.01.2014
Сообщений: 3
31.01.2014, 14:22  [ТС] 12
А, да, это понятно. Вопрос был лишний. Просто мысли спутались.
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
01.02.2014, 13:38 13
Цитата Сообщение от Avazart Посмотреть сообщение
Нужно избегать таких случаев.
Нужно знать что делаешь.
Скажем, как избежать, если есть API принимающее char const *, а у нас строка в std::string? К этому нельзя относится как "хорошо" или как "плохо". Это инструмент. Если им пользоваться грамотно, то проблем не будет.

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

Добавлено через 7 минут
В общем я за то, что не давать информацию в качестве догматов, вроде "плохо" или "хорошо", а давать ссылки и информацию, use cases. Чтобы человек разбирался и понимал, что он делает и как работает его программа.
0
01.02.2014, 13:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2014, 13:38
Помогаю со студенческими работами здесь

String, AnsiString или char * ? Что лучше использовать с классами? И как работать с типом string
Добрый вечер. Мне нужно в одну строку str1 поместить строку str2. Обе они типа string. В интернете...

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

Кириллица в string или *char
Подскажите как можно реализовать? (нужно сравнить string на кириллице с другим массивом или...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru