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

Массив строк преобразовать в строку - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 01:39     Массив строк преобразовать в строку #1
как преобразовать массив строк в строку через разделитель, то есть дано: "строка1" "строка2" "строка3"
а нужно получить "строка1, строка2, строка3"?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ching0n
 Аватар для ching0n
3 / 3 / 1
Регистрация: 06.08.2013
Сообщений: 23
08.08.2013, 01:47     Массив строк преобразовать в строку #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string a[] = { "первый текст", "второй текст", "третий текст" };
    string b;
    for (int i = 0; i < 3; i++) {
        b += a[i] + ", ";
    }
    cout << b;
    return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.08.2013, 01:53     Массив строк преобразовать в строку #3
Цитата Сообщение от fara-on Посмотреть сообщение
как преобразовать массив строк
Строк каких? В стиле С (массивы chr с терминальным '\0') или объекты string?
EggHead
0 / 0 / 0
Регистрация: 07.08.2013
Сообщений: 5
08.08.2013, 02:34     Массив строк преобразовать в строку #4
Пожалуйста уточните информацию.
Язык, возможность использования библиотек, что подразумевается с точки языка/библиотеки под "строкой" итп.
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 10:35  [ТС]     Массив строк преобразовать в строку #5
имеется массив строк, те двумерный массив, необходимо его представить в виде строки, те обычного массива с учетом разделителей
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
08.08.2013, 10:38     Массив строк преобразовать в строку #6
ching0n, в конце будет лишняя запятая
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 10:45  [ТС]     Массив строк преобразовать в строку #7
под строкой подразумевается массив
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.08.2013, 11:17     Массив строк преобразовать в строку #8

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
в конце будет лишняя запятая
обычно на это даже компиляторы забивают болт и разрешают такое писать, например, в enum'ах или при инициализации массива.



Добавлено через 2 минуты
fara-on, выделяем память под суммарную строку с учетом длины исходных + разделитель + финальный ноль. Далее, последовательно выполняем strcat() в результирующую строку.
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 11:28  [ТС]     Массив строк преобразовать в строку #9
вопрос только как это сделать)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.08.2013, 11:43     Массив строк преобразовать в строку #10
Цитата Сообщение от fara-on Посмотреть сообщение
вопрос только как это сделать)
если строго по тому, как я описал, то так:
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 <cstring>
 
int main()
{
    const char* arr[] = {"строка1","строка2","строка3"};
    const int size = sizeof(arr)/sizeof(*arr);
 
    int len = 0;
    for( int i=0; i<size; ++i )
    {
        len += strlen(arr[i]); // Сумма длин всех строк
    }
 
    len += size+1; // Добавляем на разделитель и финальный ноль
 
    char* result = new char[len];
    *result = 0; // Инициализируем итоговую строку
 
    for( int i=0; i<size; ++i )
    {
        strcat(result, arr[i]);
        strcat(result, "," );
    }
 
    std::cout << result << std::endl;
}
Хотя, лучше использовать std::string и его методы.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11840 / 6819 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
08.08.2013, 11:55     Массив строк преобразовать в строку #11
Как вариант (надо бы проверить на работоспособность):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
 
 
int main ( ) {
   const int size = 5 ;
   const char * arr [ size ] = { "string1" , "string2" , "string3" , "string4" , "string5" } ;
   int resultStringLength = 0 ;
   for ( int i = 0 ; i < size ; ++i ) { //Считаем длину всех строк
      resultStringLength += strlen ( arr [ i ] ) ; 
   }
   resultStringLength += (size-1) * 2 ; //Для разделителей ( запятая + пробел )
   char * resultString = new char [ resultStringLength + 1 ] ; // Выделяем память с учетом завершающего нуля
   resultString [ 0 ] = '\0' ; // "обнуляем" строку
   if ( size > 0 ) {
      strcat ( resultString , arr [ 0 ] ) ; //Добавляем первое слово
      for ( int i = 1 ; i < size ; ++i ) {
         strcat ( resultString , ", " ) ; // Добавляем запятую
         strcat ( resultString , arr [ i ] ) ; //Добавляем строку
      }
   }
   std::cout << resultString << std::endl ;
}
Tulosba, лишняя запятая в конце
fara-on
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 15
08.08.2013, 11:56  [ТС]     Массив строк преобразовать в строку #12
C++ (Qt)
1
  const int size = sizeof(arr)/sizeof(*arr);
Поясните пожалуйста эту строчку
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.08.2013, 12:22     Массив строк преобразовать в строку #13
Цитата Сообщение от Croessmah Посмотреть сообщение
лишняя запятая в конце
см. сообщение #8

Добавлено через 31 секунду
Цитата Сообщение от fara-on Посмотреть сообщение
const int size = sizeof(arr)/sizeof(*arr);
вычисляем кол-во элементов в массиве

Добавлено через 2 минуты
Croessmah, и раз уже пошла тема про запятую, имхо, проще просто перезаписать в последнюю '\0'. Пожертвовав одним байтом.
Croessmah
08.08.2013, 12:25
  #14

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
см. сообщение #8
Цитата Сообщение от Tulosba Посмотреть сообщение
обычно на это даже компиляторы забивают болт и разрешают такое писать,
А собственно почему они должны запрещать?

Tulosba
08.08.2013, 12:36
  #15

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
А собственно почему они должны запрещать?
Ну так чего тогда до меня докопался? Если компилятору можно, я тоже хочу.

nonedark2008
08.08.2013, 12:53
  #16

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Если компилятору можно, я тоже хочу.
Угу и преподу/заказчику так же: раз компилятору можно так запятую ставить, то я тоже буду - пофигу что в примере ее нету.

Croessmah
08.08.2013, 12:59
  #17

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Ну так чего тогда до меня докопался?
Мне просто не понятно каким боком тут компилятор вообще?
Да и какую ошибку он должен выдать - "В сформированной Вами строке в конце присутствует лишняя запятая"?
Название: Безымянный.png
Просмотров: 37

Размер: 740 байт

Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.08.2013, 13:43     Массив строк преобразовать в строку #18
Цитата Сообщение от Croessmah Посмотреть сообщение
Мне просто не понятно каким боком тут компилятор вообще?
C++
1
2
enum e { one, };
int v[] = {1,2,3,};
Добавлено через 3 минуты
А чтобы избавиться от запятой в конце, достаточно добавить одну строку:
C++
1
result[strlen(result)-1] = 0;
Croessmah
08.08.2013, 13:51
  #19

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
int v[] = {1,2,3,};
какое отношения эта запятая имеет к запятой в сформированном тексте?
На которую, собственно, и указал Catstail в посте #6
Цитата Сообщение от Catstail Посмотреть сообщение
ching0n, в конце будет лишняя запятая
и я в посте #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Tulosba, лишняя запятая в конце

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 14:03     Массив строк преобразовать в строку
Еще ссылки по теме:

Преобразовать массив цифр в строку для вывода на cout<< C++
C++ Как строку, заполненную числами, преобразовать в числовой массив?
C++ Как преобразовать строку char в массив int?

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.08.2013, 14:03     Массив строк преобразовать в строку #20
Цитата Сообщение от Croessmah Посмотреть сообщение
какое отношения эта запятая имеет к запятой в сформированном тексте?
Ровно то, что во всех случаях речь идет о "запятой в конце последовательности".
Что даже разработчики компилятора разрешили писать ее в конце перечислений, чтобы не накладывать лишних ограничений на генераторы кода. У ТС по сути как раз генерация последовательности. Короче, для ТС есть решения как с запятой, так и без - пусть выбирает любое. Я, вроде бы, всё сказал, что хотел
Yandex
Объявления
08.08.2013, 14:03     Массив строк преобразовать в строку
Ответ Создать тему
Опции темы

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